dmuratshin 9 vuotta sitten
vanhempi
sitoutus
d34b598bcc

+ 32 - 10
oxygine/src/core/gl/VideoDriverGLES20.cpp

@@ -24,7 +24,8 @@
 namespace oxygine
 namespace oxygine
 {
 {
     GLuint ib = 0;
     GLuint ib = 0;
-
+	GLuint vb = 0;
+	int vbpos = 0;
     VideoDriverGLES20::VideoDriverGLES20(): _programID(0), _p(0)
     VideoDriverGLES20::VideoDriverGLES20(): _programID(0), _p(0)
     {
     {
 
 
@@ -48,6 +49,15 @@ namespace oxygine
             oxglBufferData(GL_ELEMENT_ARRAY_BUFFER, STDRenderer::indices16.size() * sizeof(unsigned short), &STDRenderer::indices16.front(), GL_STATIC_DRAW);
             oxglBufferData(GL_ELEMENT_ARRAY_BUFFER, STDRenderer::indices16.size() * sizeof(unsigned short), &STDRenderer::indices16.front(), GL_STATIC_DRAW);
             oxglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
             oxglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
         }
         }
+
+		if (!vb)
+		{
+			oxglGenBuffers(1, &vb);
+			oxglBindBuffer(GL_ARRAY_BUFFER, vb);
+			char data[160000];
+			oxglBufferData(GL_ARRAY_BUFFER, 160000, data, GL_STATIC_DRAW);
+			oxglBindBuffer(GL_ARRAY_BUFFER, 0);
+		}
     }
     }
 
 
     bool VideoDriverGLES20::isReady() const
     bool VideoDriverGLES20::isReady() const
@@ -74,6 +84,9 @@ namespace oxygine
 
 
     void VideoDriverGLES20::clear(const Color& color)
     void VideoDriverGLES20::clear(const Color& color)
     {
     {
+
+
+		vbpos = 0;
         Vector4 c = color.toVector();
         Vector4 c = color.toVector();
         glClearColor(c.x, c.y, c.z, c.w);
         glClearColor(c.x, c.y, c.z, c.w);
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
@@ -113,6 +126,7 @@ namespace oxygine
 
 
     void VideoDriverGLES20::draw(PRIMITIVE_TYPE pt, const VertexDeclaration* decl_, const void* vdata, unsigned int size)
     void VideoDriverGLES20::draw(PRIMITIVE_TYPE pt, const VertexDeclaration* decl_, const void* vdata, unsigned int size)
     {
     {
+		OX_ASSERT(0);
         const VertexDeclarationGL* decl = static_cast<const VertexDeclarationGL*>(decl_);
         const VertexDeclarationGL* decl = static_cast<const VertexDeclarationGL*>(decl_);
 
 
         const unsigned char* verticesData = (const unsigned char*)vdata;
         const unsigned char* verticesData = (const unsigned char*)vdata;
@@ -143,24 +157,29 @@ namespace oxygine
 
 
     void VideoDriverGLES20::draw(PRIMITIVE_TYPE pt, const VertexDeclaration* decl_, const void* vdata, unsigned int verticesDataSize, const unsigned short* indicesData, unsigned int numIndices)
     void VideoDriverGLES20::draw(PRIMITIVE_TYPE pt, const VertexDeclaration* decl_, const void* vdata, unsigned int verticesDataSize, const unsigned short* indicesData, unsigned int numIndices)
     {
     {
-        const VertexDeclarationGL* decl = static_cast<const VertexDeclarationGL*>(decl_);
+		const VertexDeclarationGL* decl = static_cast<const VertexDeclarationGL*>(decl_);
+
+		oxglBindBuffer(GL_ARRAY_BUFFER, vb);
+	//	oxglBufferData(GL_ARRAY_BUFFER, verticesDataSize * decl_->size, vdata, GL_STATIC_DRAW);
+		oxglBufferSubData(GL_ARRAY_BUFFER, vbpos, verticesDataSize * decl_->size, vdata);
+
 
 
-        const unsigned char* verticesData = (const unsigned char*)vdata;
 
 
-        oxglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib);
-        if (indicesData != &STDRenderer::indices16.front())
-            int q = 0;
+		oxglBindBuffer(GL_ARRAY_BUFFER, vb);
 
 
         const VertexDeclarationGL::Element* el = decl->elements;
         const VertexDeclarationGL::Element* el = decl->elements;
         for (int i = 0; i < decl->numElements; ++i)
         for (int i = 0; i < decl->numElements; ++i)
         {
         {
-            oxglEnableVertexAttribArray(el->index);
-            oxglVertexAttribPointer(el->index, el->size, el->elemType, el->normalized, decl->size, verticesData + el->offset);
-            el++;
+			oxglEnableVertexAttribArray(el->index);
+            oxglVertexAttribPointer(el->index, el->size, el->elemType, el->normalized, decl->size, (void*)(vbpos + el->offset));
+			el++;
         }
         }
 		 
 		 
+
+		oxglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib);
         glDrawElements(getPT(pt), numIndices, GL_UNSIGNED_SHORT, 0);
         glDrawElements(getPT(pt), numIndices, GL_UNSIGNED_SHORT, 0);
 
 
+
         el = decl->elements;
         el = decl->elements;
         for (int i = 0; i < decl->numElements; ++i)
         for (int i = 0; i < decl->numElements; ++i)
         {
         {
@@ -168,9 +187,12 @@ namespace oxygine
             el++;
             el++;
         }
         }
 
 
+		oxglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
+		oxglBindBuffer(GL_ARRAY_BUFFER, 0);
 
 
-        _debugAddPrimitives(pt, numIndices);
 
 
+        _debugAddPrimitives(pt, numIndices);
+		vbpos += verticesDataSize;
         CHECKGL();
         CHECKGL();
     }
     }
 
 

+ 7 - 3
oxygine/src/core/gl/oxgl.cpp

@@ -98,8 +98,10 @@ extern "C"
     {}
     {}
     GLAPI void APIENTRY def_glGenBuffers(GLsizei n, GLuint* buffers)
     GLAPI void APIENTRY def_glGenBuffers(GLsizei n, GLuint* buffers)
     {}
     {}
-    GLAPI void APIENTRY def_glBufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage)
-    {}
+	GLAPI void APIENTRY def_glBufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage)
+	{}
+	GLAPI void APIENTRY def_glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void* data)
+	{}
     GLAPI void APIENTRY def_glGetProgramiv(GLuint program, GLenum pname, GLint* params)
     GLAPI void APIENTRY def_glGetProgramiv(GLuint program, GLenum pname, GLint* params)
     {}
     {}
     GLAPI void APIENTRY def_glGenerateMipmap(GLenum target)
     GLAPI void APIENTRY def_glGenerateMipmap(GLenum target)
@@ -158,6 +160,7 @@ extern "C"
     PFNGLBINDBUFFERPROC _glBindBuffer = 0;
     PFNGLBINDBUFFERPROC _glBindBuffer = 0;
     PFNGLGENBUFFERSPROC _glGenBuffers = 0;
     PFNGLGENBUFFERSPROC _glGenBuffers = 0;
     PFNGLBUFFERDATAPROC _glBufferData = 0;
     PFNGLBUFFERDATAPROC _glBufferData = 0;
+	PFNGLBUFFERSUBDATAPROC _glBufferSubData = 0;
     PFNGLGETPROGRAMIVPROC _glGetProgramiv = 0;
     PFNGLGETPROGRAMIVPROC _glGetProgramiv = 0;
     PFNGLGENERATEMIPMAPPROC _glGenerateMipmap = 0;
     PFNGLGENERATEMIPMAPPROC _glGenerateMipmap = 0;
     PFNGLSTENCILOPSEPARATEPROC _glStencilOpSeparate = 0;
     PFNGLSTENCILOPSEPARATEPROC _glStencilOpSeparate = 0;
@@ -209,7 +212,8 @@ int initGLExtensions(myGetProcAdress func)
     GETFUNC(_glCompressedTexImage2D, def_glCompressedTexImage2D, PFNGLCOMPRESSEDTEXIMAGE2DPROC, "glCompressedTexImage2D");
     GETFUNC(_glCompressedTexImage2D, def_glCompressedTexImage2D, PFNGLCOMPRESSEDTEXIMAGE2DPROC, "glCompressedTexImage2D");
     GETFUNC(_glBindBuffer, def_glBindBuffer, PFNGLBINDBUFFERPROC, "glBindBuffer");
     GETFUNC(_glBindBuffer, def_glBindBuffer, PFNGLBINDBUFFERPROC, "glBindBuffer");
     GETFUNC(_glGenBuffers, def_glGenBuffers, PFNGLGENBUFFERSPROC, "glGenBuffers");
     GETFUNC(_glGenBuffers, def_glGenBuffers, PFNGLGENBUFFERSPROC, "glGenBuffers");
-    GETFUNC(_glBufferData, def_glBufferData, PFNGLBUFFERDATAPROC, "glBufferData");
+	GETFUNC(_glBufferData, def_glBufferData, PFNGLBUFFERDATAPROC, "glBufferData");
+	GETFUNC(_glBufferSubData, def_glBufferSubData, PFNGLBUFFERSUBDATAPROC, "glBufferSubData");
     GETFUNC(_glGetProgramiv, def_glGetProgramiv, PFNGLGETPROGRAMIVPROC, "glGetProgramiv");
     GETFUNC(_glGetProgramiv, def_glGetProgramiv, PFNGLGETPROGRAMIVPROC, "glGetProgramiv");
     GETFUNC(_glGenerateMipmap, def_glGenerateMipmap, PFNGLGENERATEMIPMAPPROC, "glGenerateMipmap");
     GETFUNC(_glGenerateMipmap, def_glGenerateMipmap, PFNGLGENERATEMIPMAPPROC, "glGenerateMipmap");
     GETFUNC(_glStencilOpSeparate, def_glStencilOpSeparate, PFNGLSTENCILOPSEPARATEPROC, "glStencilOpSeparate");
     GETFUNC(_glStencilOpSeparate, def_glStencilOpSeparate, PFNGLSTENCILOPSEPARATEPROC, "glStencilOpSeparate");

+ 3 - 1
oxygine/src/core/gl/oxgl.h

@@ -56,7 +56,8 @@ extern "C"
     extern PFNGLCOMPRESSEDTEXIMAGE2DPROC _glCompressedTexImage2D;
     extern PFNGLCOMPRESSEDTEXIMAGE2DPROC _glCompressedTexImage2D;
     extern PFNGLBINDBUFFERPROC _glBindBuffer;
     extern PFNGLBINDBUFFERPROC _glBindBuffer;
     extern PFNGLGENBUFFERSPROC _glGenBuffers;
     extern PFNGLGENBUFFERSPROC _glGenBuffers;
-    extern PFNGLBUFFERDATAPROC _glBufferData;
+	extern PFNGLBUFFERDATAPROC _glBufferData;
+	extern PFNGLBUFFERSUBDATAPROC _glBufferSubData;
     extern PFNGLGETPROGRAMIVPROC _glGetProgramiv;
     extern PFNGLGETPROGRAMIVPROC _glGetProgramiv;
     extern PFNGLGENERATEMIPMAPPROC _glGenerateMipmap;
     extern PFNGLGENERATEMIPMAPPROC _glGenerateMipmap;
     extern PFNGLSTENCILOPSEPARATEPROC _glStencilOpSeparate;
     extern PFNGLSTENCILOPSEPARATEPROC _glStencilOpSeparate;
@@ -154,6 +155,7 @@ extern "C"
 #define oxglBindBuffer DECLARE_GLEXT(glBindBuffer)
 #define oxglBindBuffer DECLARE_GLEXT(glBindBuffer)
 #define oxglGenBuffers DECLARE_GLEXT(glGenBuffers)
 #define oxglGenBuffers DECLARE_GLEXT(glGenBuffers)
 #define oxglBufferData DECLARE_GLEXT(glBufferData)
 #define oxglBufferData DECLARE_GLEXT(glBufferData)
+#define oxglBufferSubData DECLARE_GLEXT(glBufferSubData)
 #define oxglGetProgramiv DECLARE_GLEXT(glGetProgramiv)
 #define oxglGetProgramiv DECLARE_GLEXT(glGetProgramiv)
 #define oxglGenerateMipmap DECLARE_GLEXT(glGenerateMipmap)
 #define oxglGenerateMipmap DECLARE_GLEXT(glGenerateMipmap)
 #define oxglStencilOpSeparate DECLARE_GLEXT(glStencilOpSeparate)
 #define oxglStencilOpSeparate DECLARE_GLEXT(glStencilOpSeparate)