OpenGL ES functions not accepting values originating outside of it's view
Posted
by Josh Elsasser
on Stack Overflow
See other posts from Stack Overflow
or by Josh Elsasser
Published on 2010-05-28T14:21:45Z
Indexed on
2010/06/02
17:44 UTC
Read the original article
Hit count: 272
I've been unable to figure this out on my own.
I currently have an Open GLES setup where a view controller both updates a game world (with a dt), fetches the data I need to render, passes it off to an EAGLView through two structures (built of Apple's ES1Renderer), and draws the scene.
Whenever a value originates outside of the Open GL view, it can't be used to either translate objects using glTranslatef, or set up the scene using glOrthof. If I assign a new value to something, it will work - even if it is the exact same number.
The two structures I have each contain a variety of floating-point numbers and booleans, along with two arrays. I can log the values from within my renderer - they make it there - but I receive errors from OpenGL if I try to do anything with them. No crashes result, but the glOrthof call doesn't work if I don't set the camera values to anything different.
Code used to set up scene:
[EAGLContext setCurrentContext:context];
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
//clears the color buffer bit
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
//sets up the scene w/ ortho projection
glViewport(0, 0, 320, 480);
glLoadIdentity();
glOrthof(320, 0, dynamicData.cam_x2, dynamicData.cam_x1, 1.0, -1.0);
glClearColor(1.0, 1.0, 1.0, 1.0);
/*error checking code here*/
"dynamicData" (which is replaced every frame) is created within my game simulation. From within my controller, I call a method (w/in my simulation) that returns it, and pass the result on to the EAGLView, which passes it on to the renderer. I haven't been able to come up with a better solution for this - suggestions in this regard would be greatly appreciated as well.
Also, this function doesn't work as well (values originate in the same place):
glTranslatef(dynamicData.ship_x, dynamicData.ship_y, 0.0);
Thanks in advance.
Additional Definitions:
Structure (declared in a separate header):
typedef struct {
float ship_x, ship_y;
float cam_x1, cam_x2;
} dynamicRenderData;
Render data getter (and builder) (every frame)
- (dynamicData)getDynRenderData
{
//d_rd is an ivar, zeroed on initialization
d_rd.ship_x = mainShip.position.x;
d_rd.ship_y = mainShip.position.y;
d_rd.cam_x1 = d_rd.ship_x - 30.0f;
d_rd.cam_x2 = d_rd.cam_x1 + 480.0f;
return d_rd;
}
Zeroed at start. (d_rd.ship_x = 0;
, etc…)
Setting up the view.
Prototype (GLView): - (void)draw: (dynamicRenderData)dynamicData
Prototype (Renderer): - (void)drawView: (dynamicRenderData)dynamicData
How it's called w/in the controller:
//controller
[glview draw: [world getDynRenderData]];
//glview (within draw)
[renderer drawView: dynamicData];
© Stack Overflow or respective owner