X-Git-Url: http://git.tdb.fi/?p=gldbg.git;a=blobdiff_plain;f=flavors%2Fgl%2Fsource%2Fglstate.cpp;h=fc355c7972aceb2a9b2f7e174eefe070b7766219;hp=750d70315835a45395512512ce04ff2a2963cf3d;hb=8ac18c1745c64441dbbdc130b1c396dcde9b21a7;hpb=bc201c7dd5ebef9c0db1142387715c7ad4d53b62 diff --git a/flavors/gl/source/glstate.cpp b/flavors/gl/source/glstate.cpp index 750d703..fc355c7 100644 --- a/flavors/gl/source/glstate.cpp +++ b/flavors/gl/source/glstate.cpp @@ -80,6 +80,8 @@ GlState::GlState(): decoder->glGetIntegerv = glGetIntegerv; + decoder->glEnable = glEnable; + decoder->glDisable = glDisable; decoder->glEnableClientState = glEnableClientState; decoder->glDisableClientState = glDisableClientState; @@ -197,6 +199,21 @@ void GlState::glGetIntegerv(void *user_data, GLenum pname, int *param) // Boolean state bool &GlState::get_boolean_state(GLenum state) +{ + if(state==GL_TEXTURE_1D) + return texunits[active_tex].binding_1d.enabled; + else if(state==GL_TEXTURE_2D) + return texunits[active_tex].binding_2d.enabled; + else if(state==GL_TEXTURE_3D) + return texunits[active_tex].binding_3d.enabled; + else if(state==GL_TEXTURE_CUBE_MAP) + return texunits[active_tex].binding_cube.enabled; + + static bool dummy; + return dummy; +} + +bool &GlState::get_boolean_client_state(GLenum state) { if(state==GL_VERTEX_ARRAY) return vertex_array.enabled; @@ -211,16 +228,26 @@ bool &GlState::get_boolean_state(GLenum state) return dummy; } -void GlState::glEnableClientState(void *user_data, GLenum state) +void GlState::glEnable(void *user_data, GLenum state) { reinterpret_cast(user_data)->get_boolean_state(state) = true; } -void GlState::glDisableClientState(void *user_data, GLenum state) +void GlState::glDisable(void *user_data, GLenum state) { reinterpret_cast(user_data)->get_boolean_state(state) = false; } +void GlState::glEnableClientState(void *user_data, GLenum state) +{ + reinterpret_cast(user_data)->get_boolean_client_state(state) = true; +} + +void GlState::glDisableClientState(void *user_data, GLenum state) +{ + reinterpret_cast(user_data)->get_boolean_client_state(state) = false; +} + // Vertex attributes void GlState::glColor3f(void *user_data, float r, float g, float b) @@ -499,10 +526,36 @@ void GlState::glBindTexture(void *user_data, GLenum target, unsigned id) reinterpret_cast(user_data)->set_current_texture(target, id); } +void GlState::glTexImage1D(void *user_data, GLenum target, int level, int ifmt, int width, int, GLenum, GLenum, const void *) +{ + if(TextureState *tex = reinterpret_cast(user_data)->get_current_texture(target)) + tex->set_image_1d(level, ifmt, width); +} + void GlState::glTexImage2D(void *user_data, GLenum target, int level, int ifmt, int width, int height, int, GLenum, GLenum, const void *) +{ + GLenum face = 0; + for(unsigned i=0; i<6; ++i) + if(texture_cube_faces[i]==target) + { + face = target; + target = GL_TEXTURE_CUBE_MAP; + break; + } + + if(TextureState *tex = reinterpret_cast(user_data)->get_current_texture(target)) + { + if(face) + tex->set_face_image_2d(face, level, ifmt, width, height); + else + tex->set_image_2d(level, ifmt, width, height); + } +} + +void GlState::glTexImage3D(void *user_data, GLenum target, int level, int ifmt, int width, int height, int depth, int, GLenum, GLenum, const void *) { if(TextureState *tex = reinterpret_cast(user_data)->get_current_texture(target)) - tex->set_image_2d(level, ifmt, width, height); + tex->set_image_3d(level, ifmt, width, height, depth); } void GlState::glTexParameteri(void *user_data, GLenum target, GLenum param, int value)