From 91d90155ddc768a5e43ecab2fbd97a05116364c7 Mon Sep 17 00:00:00 2001 From: ExMix Date: Thu, 19 Dec 2013 18:06:22 +0300 Subject: [PATCH] [drape]adaptation for new wave --- drape/drape_tests/batcher_tests.cpp | 32 ++++++++++--------- drape/drape_tests/uniform_value_tests.cpp | 39 ++++++++++++----------- drape_head/glwidget.cpp | 6 ++-- drape_head/glwidget.hpp | 2 +- 4 files changed, 42 insertions(+), 37 deletions(-) diff --git a/drape/drape_tests/batcher_tests.cpp b/drape/drape_tests/batcher_tests.cpp index 861a102a1a..da201d45bd 100644 --- a/drape/drape_tests/batcher_tests.cpp +++ b/drape/drape_tests/batcher_tests.cpp @@ -3,9 +3,14 @@ #include "../glconstants.hpp" #include "../batcher.hpp" #include "../gpu_program_manager.hpp" +#include "../shader_def.hpp" #include "glmock_functions.hpp" +#include "../../base/stl_add.hpp" +#include "../../std/bind.hpp" +#include "../../std/scoped_ptr.hpp" + #include using testing::_; @@ -17,22 +22,16 @@ using testing::AnyOf; namespace { - class VAOAcceptor : public IBatchFlush + struct VAOAcceptor { - public: - VAOAcceptor(RefPointer program) - : m_program(program) - { - } - virtual void FlushFullBucket(const GLState & state, TransferPointer bucket) { MasterPointer masterBucket(bucket); masterBucket->Build(m_program); - masterBucket.Destroy(); + m_vao.push_back(masterBucket); } - private: + vector > m_vao; RefPointer m_program; }; @@ -97,9 +96,8 @@ UNIT_TEST(BatchLists_Test) EXPECTGL(glDeleteShader(AnyOf(10, 11))).Times(2); } - GpuProgramManager * pm = new GpuProgramManager(); - VAOAcceptor acceptor(pm->GetProgram(0)); - Batcher batcher(RefPointer(MakeStackRefPointer((IBatchFlush *)&acceptor))); + scoped_ptr pm(new GpuProgramManager()); + Batcher batcher; { InSequence vaoSeq; @@ -140,7 +138,7 @@ UNIT_TEST(BatchLists_Test) // delete bucket EXPECTGL(glDeleteBuffer(IndexBufferID)); EXPECTGL(glDeleteBuffer(DataBufferID)); - EXPECTGL(glDeleteVertexArray(VaoID)); + EXPECTGL(glDeleteVertexArray(3)); EXPECTGL(glUseProgram(0)); EXPECTGL(glDeleteProgram(ProgramID)); } @@ -158,8 +156,12 @@ UNIT_TEST(BatchLists_Test) AttributeProvider provider(1, 10); provider.InitStream(0, binding, MakeStackRefPointer(data)); + VAOAcceptor vaoAcceptor; + vaoAcceptor.m_program = pm->GetProgram(gpu::SOLID_AREA_PROGRAM); + batcher.StartSession(bind(&VAOAcceptor::FlushFullBucket, &vaoAcceptor, _1, _2)); batcher.InsertTriangleList(state, MakeStackRefPointer(&provider)); - batcher.Flush(); + batcher.EndSession(); - delete pm; + for (size_t i = 0; i < vaoAcceptor.m_vao.size(); ++i) + vaoAcceptor.m_vao[i].Destroy(); } diff --git a/drape/drape_tests/uniform_value_tests.cpp b/drape/drape_tests/uniform_value_tests.cpp index 26199a3116..039f399c55 100644 --- a/drape/drape_tests/uniform_value_tests.cpp +++ b/drape/drape_tests/uniform_value_tests.cpp @@ -1,6 +1,8 @@ #include "../../testing/testing.hpp" +#include "../gpu_program_manager.hpp" #include "../gpu_program.hpp" +#include "../shader_def.hpp" #include "../uniform_value.hpp" #include "glmock_functions.hpp" @@ -53,9 +55,6 @@ UNIT_TEST(UniformValueTest) const int32_t positionLoc = 10; const int32_t modelViewLoc = 11; - Shader vertexShader("", Shader::VertexShader); - Shader fragmentShader("", Shader::FragmentShader); - float matrix[16] = { 1.0f, 0.0f, 0.0f, 0.0f, @@ -70,11 +69,11 @@ UNIT_TEST(UniformValueTest) InSequence seq; // vertexShader->Ref() EXPECTGL(glCreateShader(GLConst::GLVertexShader)).WillOnce(Return(VertexShaderID)); - EXPECTGL(glShaderSource(VertexShaderID, "")).Times(1); + EXPECTGL(glShaderSource(VertexShaderID, _)).Times(1); EXPECTGL(glCompileShader(VertexShaderID, _)).WillOnce(Return(true)); // fragmentShader->Ref() EXPECTGL(glCreateShader(GLConst::GLFragmentShader)).WillOnce(Return(FragmentShaderID)); - EXPECTGL(glShaderSource(FragmentShaderID, "")).Times(1); + EXPECTGL(glShaderSource(FragmentShaderID, _)).Times(1); EXPECTGL(glCompileShader(FragmentShaderID, _)).WillOnce(Return(true)); EXPECTGL(glCreateProgram()).WillOnce(Return(ProgramID)); @@ -86,8 +85,6 @@ UNIT_TEST(UniformValueTest) EXPECTGL(glDetachShader(ProgramID, VertexShaderID)); EXPECTGL(glDetachShader(ProgramID, FragmentShaderID)); - EXPECTGL(glDeleteShader(VertexShaderID)); - EXPECTGL(glDeleteShader(FragmentShaderID)); EXPECTGL(glUseProgram(ProgramID)); EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc)); @@ -120,57 +117,61 @@ UNIT_TEST(UniformValueTest) EXPECTGL(glUseProgram(0)); EXPECTGL(glDeleteProgram(ProgramID)); + + EXPECTGL(glDeleteShader(VertexShaderID)); + EXPECTGL(glDeleteShader(FragmentShaderID)); } - GpuProgram * program = new GpuProgram(MakeStackRefPointer(&vertexShader), - MakeStackRefPointer(&fragmentShader)); + GpuProgramManager * manager = new GpuProgramManager(); + RefPointer program = manager->GetProgram(gpu::SOLID_AREA_PROGRAM); program->Bind(); { UniformValue v("position", 1); - v.Apply(MakeStackRefPointer(program)); + v.Apply(program); } { UniformValue v("position", 1, 2); - v.Apply(MakeStackRefPointer(program)); + v.Apply(program); } { UniformValue v("position", 1, 2, 3); - v.Apply(MakeStackRefPointer(program)); + v.Apply(program); } { UniformValue v("position", 1, 2, 3, 4); - v.Apply(MakeStackRefPointer(program)); + v.Apply(program); } { UniformValue v("position", 1.0f); - v.Apply(MakeStackRefPointer(program)); + v.Apply(program); } { UniformValue v("position", 1.0f, 2.0f); - v.Apply(MakeStackRefPointer(program)); + v.Apply(program); } { UniformValue v("position", 1.0f, 2.0f, 3.0f); - v.Apply(MakeStackRefPointer(program)); + v.Apply(program); } { UniformValue v("position", 1.0f, 2.0f, 3.0f, 4.0f); - v.Apply(MakeStackRefPointer(program)); + v.Apply(program); } { UniformValue v("viewModel", matrix); - v.Apply(MakeStackRefPointer(program)); + v.Apply(program); } - delete program; + program = RefPointer(); + delete manager; } diff --git a/drape_head/glwidget.cpp b/drape_head/glwidget.cpp index 73dbe4f9b5..83a2bc93ef 100644 --- a/drape_head/glwidget.cpp +++ b/drape_head/glwidget.cpp @@ -4,6 +4,7 @@ #include "../drape/shader_def.hpp" #include "../base/stl_add.hpp" +#include "../std/bind.hpp" namespace { @@ -18,7 +19,7 @@ namespace GLWidget::GLWidget() { - m_batcher = new Batcher(MakeStackRefPointer((IBatchFlush *)this)); + m_batcher = new Batcher(); m_programManager = new GpuProgramManager(); } @@ -70,13 +71,14 @@ void GLWidget::initializeGL() float color[4] = { 1.0, 0.0, 0.0, 1.0 }; uniforms.push_back(UniformValue("color", color[0], color[1], color[2], color[3])); + m_batcher->StartSession(bind(&GLWidget::FlushFullBucket, this, _1, _2)); ListGenerator gen; gen.SetDepth(0.5); gen.SetProgram(gpu::SOLID_AREA_PROGRAM); gen.SetViewport(-1.0f, -1.0f, 2.0f, 2.0f); gen.SetUniforms(uniforms); gen.Generate(30, *m_batcher); - m_batcher->Flush(); + m_batcher->EndSession(); } void GLWidget::paintGL() diff --git a/drape_head/glwidget.hpp b/drape_head/glwidget.hpp index e5d70cfa9a..2750a707ac 100644 --- a/drape_head/glwidget.hpp +++ b/drape_head/glwidget.hpp @@ -5,7 +5,7 @@ #include "../drape/batcher.hpp" #include "../drape/gpu_program_manager.hpp" -class GLWidget : public QGLWidget, public IBatchFlush +class GLWidget : public QGLWidget { public: GLWidget();