Browse Source

experimental index buffer

dmuratshin 9 years ago
parent
commit
753397b319
3 changed files with 34 additions and 11 deletions
  1. 15 11
      examples/Demo/src/test.h
  2. 2 0
      oxygine/src/STDRenderer.cpp
  3. 17 0
      oxygine/src/core/gl/VideoDriverGLES20.cpp

+ 15 - 11
examples/Demo/src/test.h

@@ -17,20 +17,24 @@ public:
     Content() : driver(0) { setName("content"); }
     Content() : driver(0) { setName("content"); }
     IVideoDriver* driver;
     IVideoDriver* driver;
 
 
-    /*
+
     void render(const RenderState& parentRS)
     void render(const RenderState& parentRS)
     {
     {
-
-        parentRS.renderer->drawBatch();
-
-        RenderState rs = parentRS;
-        STDRenderer renderer(driver ? driver : IVideoDriver::instance);
-        renderer.Renderer::begin(parentRS.renderer);
-        rs.renderer = &renderer;
-        Actor::render(rs);
-        renderer.end();
+        if (!driver)
+        {
+            Actor::render(parentRS);
+            return;
+        }
+        IVideoDriver* prev = IVideoDriver::instance;
+
+        IVideoDriver::instance = driver;
+        STDRenderer::instance->setDriver(driver);
+        Actor::render(parentRS);
+        STDRenderer::instance->setDriver(prev);
+
+        IVideoDriver::instance = prev;
     }
     }
-    */
+
 };
 };
 
 
 DECLARE_SMART(Test, spTest);
 DECLARE_SMART(Test, spTest);

+ 2 - 0
oxygine/src/STDRenderer.cpp

@@ -184,6 +184,8 @@ namespace oxygine
         invisible->init(im, false);
         invisible->init(im, false);
         invisible->setLinearFilter(false);
         invisible->setLinearFilter(false);
 
 
+        IVideoDriver::instance->restore();
+
         setDefaultSettings();
         setDefaultSettings();
         _restored = true;
         _restored = true;
     }
     }

+ 17 - 0
oxygine/src/core/gl/VideoDriverGLES20.cpp

@@ -10,6 +10,8 @@
 #include "../ZipFileSystem.h"
 #include "../ZipFileSystem.h"
 #include "../system_data.h"
 #include "../system_data.h"
 
 
+#include "STDRenderer.h"
+
 #if OXYGINE_SDL
 #if OXYGINE_SDL
 #include "SDL_config.h"
 #include "SDL_config.h"
 #endif
 #endif
@@ -21,8 +23,10 @@
 
 
 namespace oxygine
 namespace oxygine
 {
 {
+    GLuint ib = 0;
     VideoDriverGLES20::VideoDriverGLES20(): _programID(0), _p(0)
     VideoDriverGLES20::VideoDriverGLES20(): _programID(0), _p(0)
     {
     {
+
     }
     }
 
 
     VideoDriverGLES20::~VideoDriverGLES20()
     VideoDriverGLES20::~VideoDriverGLES20()
@@ -35,6 +39,14 @@ namespace oxygine
     {
     {
         //_us.restore();
         //_us.restore();
         setDefaultSettings();
         setDefaultSettings();
+
+        if (!ib)
+        {
+            oxglGenBuffers(1, &ib);
+            oxglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib);
+            oxglBufferData(GL_ELEMENT_ARRAY_BUFFER, STDRenderer::indices16.size() * sizeof(unsigned short), &STDRenderer::indices16.front(), GL_STATIC_DRAW);
+            oxglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
+        }
     }
     }
 
 
     bool VideoDriverGLES20::isReady() const
     bool VideoDriverGLES20::isReady() const
@@ -49,6 +61,7 @@ namespace oxygine
 
 
     void VideoDriverGLES20::reset()
     void VideoDriverGLES20::reset()
     {
     {
+        int q = 0;
         //_currentProgram = 0;
         //_currentProgram = 0;
     }
     }
 
 
@@ -139,6 +152,10 @@ namespace oxygine
 
 
         const unsigned char* verticesData = (const unsigned char*)vdata;
         const unsigned char* verticesData = (const unsigned char*)vdata;
 
 
+        //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib);
+        if (indicesData != &STDRenderer::indices16.front())
+            int q = 0;
+
         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)
         {
         {