X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=flavors%2Fgl%2Fsource%2Fglstate.h;h=8cba1d25b142ec022afdb94f8416d91db82e2fec;hb=HEAD;hp=ab5ab050a87e51f30e55fc8e577e6cb6b6c3ca72;hpb=cbf00fed7d2ab4d3a6593a1f230d17f21bc61818;p=gldbg.git diff --git a/flavors/gl/source/glstate.h b/flavors/gl/source/glstate.h index ab5ab05..8cba1d2 100644 --- a/flavors/gl/source/glstate.h +++ b/flavors/gl/source/glstate.h @@ -29,9 +29,6 @@ struct Vector4 /** Tracks OpenGL state based on the command stream. This class is essentially a (partial) OpenGL implementation in itself. - -XXX Should determine the number of texture units the target implementation -actually supports. */ class GlState { @@ -44,12 +41,12 @@ public: private: GlDecoder *decoder; Vector4 color; - Vector4 texcoord[8]; + std::vector texcoord; Vector3 normal; unsigned active_tex; unsigned client_active_tex; TextureMap textures; - TexUnitState texunits[8]; + std::vector texunits; BufferMap buffers; BufferState *array_buffer; BufferState *element_buffer; @@ -58,8 +55,8 @@ private: ArrayState vertex_array; ArrayState normal_array; ArrayState color_array; - ArrayState texcoord_arrays[8]; - std::map attrib_arrays; + std::vector texcoord_arrays; + std::vector attrib_arrays; ShaderMap shaders; ProgramMap programs; @@ -69,8 +66,20 @@ public: int decode(const char *, unsigned); +private: + static void glGetIntegerv(void *, GLenum, int *); + +public: + unsigned get_max_texture_units() const { return texunits.size(); } + unsigned get_max_vertex_attribs() const { return attrib_arrays.size(); } + unsigned get_max_uniform_buffer_bindings() const { return uniform_bind_points.size(); } + private: bool &get_boolean_state(GLenum); + bool &get_boolean_client_state(GLenum); + + static void glEnable(void *, GLenum); + static void glDisable(void *, GLenum); static void glEnableClientState(void *, GLenum); static void glDisableClientState(void *, GLenum); @@ -89,8 +98,6 @@ public: const Vector3 &get_normal() const { return normal; } private: - ArrayState &get_attrib_array(unsigned); - static void glVertexPointer(void *, int, GLenum, int, const void *); static void glNormalPointer(void *, GLenum, int, const void *); static void glColorPointer(void *, int, GLenum, int, const void *); @@ -116,9 +123,9 @@ private: static void glBindBuffer(void *, GLenum, unsigned); static void glBindBufferBase(void *, GLenum, unsigned, unsigned); - static void glBindBufferRange(void *, GLenum, unsigned, unsigned, int, int); - static void glBufferData(void *, GLenum, int, const void *, GLenum); - static void glBufferSubData(void *, GLenum, int, int, const void *); + static void glBindBufferRange(void *, GLenum, unsigned, unsigned, ptrdiff_t, ptrdiff_t); + static void glBufferData(void *, GLenum, ptrdiff_t, const void *, GLenum); + static void glBufferSubData(void *, GLenum, ptrdiff_t, ptrdiff_t, const void *); static void glDeleteBuffers(void *, int, const unsigned *); public: @@ -133,7 +140,9 @@ private: static void glActiveTexture(void *, unsigned); static void glBindTexture(void *, GLenum, unsigned); + static void glTexImage1D(void *, GLenum, int, int, int, int, GLenum, GLenum, const void *); static void glTexImage2D(void *, GLenum, int, int, int, int, int, GLenum, GLenum, const void *); + static void glTexImage3D(void *, GLenum, int, int, int, int, int, int, GLenum, GLenum, const void *); static void glTexParameteri(void *, GLenum, GLenum, int); static void glTexParameteriv(void *, GLenum, GLenum, const int *); static void glDeleteTextures(void *, int, const unsigned *);