diff --git a/src/gradient.cpp b/src/gradient.cpp index 8e25541b..b039f2de 100644 --- a/src/gradient.cpp +++ b/src/gradient.cpp @@ -14,29 +14,11 @@ #include -#ifdef WIN32 -# define WIN32_LEAN_AND_MEAN -# include -# if defined USE_D3D9 -# include - using std::min; - using std::max; -# include -# include -# endif -#endif - #include "core.h" #include "lolgl.h" using namespace std; -#if defined USE_D3D9 -extern IDirect3DDevice9 *g_d3ddevice; -#elif defined _XBOX -extern D3DDevice *g_d3ddevice; -#endif - namespace lol { @@ -221,11 +203,7 @@ void Gradient::TickDraw(float deltams) data->m_vdecl->SetStream(data->m_cbo, attr_col); /* Draw arrays */ -#if defined _XBOX || defined USE_D3D9 - g_d3ddevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2); -#else - glDrawArrays(GL_TRIANGLES, 0, 6); -#endif + data->m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 2); } Gradient::~Gradient() diff --git a/src/scene.cpp b/src/scene.cpp index 1c08050a..fcac8364 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -110,6 +110,7 @@ Scene::~Scene() delete data->bufs[i]; free(data->bufs); #endif + delete data->m_vdecl; delete data; } @@ -326,10 +327,7 @@ void Scene::Render() // XXX: rename to Blit() uni_mat = stdshader->GetUniformLocation("model_matrix"); stdshader->SetUniform(uni_mat, data->model_matrix); - data->m_vdecl->Bind(); #if defined USE_D3D9 || defined _XBOX - //g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); - g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); #else uni_tex = stdshader->GetUniformLocation("in_Texture"); stdshader->SetUniform(uni_tex, 0); @@ -389,24 +387,16 @@ void Scene::Render() // XXX: rename to Blit() data->tiles[i].tileset->Bind(); /* Bind vertex and texture coordinate buffers */ + data->m_vdecl->Bind(); data->m_vdecl->SetStream(data->bufs[buf], attr_pos); data->m_vdecl->SetStream(data->bufs[buf + 1], attr_tex); /* Draw arrays */ -#if defined USE_D3D9 || defined _XBOX - g_d3ddevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, (n - i) * 2); -#else - glDrawArrays(GL_TRIANGLES, 0, (n - i) * 6); - -# if defined HAVE_GL_2X && !defined __APPLE__ - //glBindVertexArray(0); -# endif -# if !defined __CELLOS_LV2__ // Use cgGLEnableClientState etc. -# else - //glDisableClientState(GL_VERTEX_ARRAY); - //glDisableClientState(GL_TEXTURE_COORD_ARRAY); -# endif +#if 0 + data->m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, (n - i) * 2); #endif + data->m_vdecl->Unbind(); + data->tiles[i].tileset->Unbind(); } free(data->tiles); diff --git a/src/tileset.cpp b/src/tileset.cpp index 6accbc1a..110cd0c0 100644 --- a/src/tileset.cpp +++ b/src/tileset.cpp @@ -237,6 +237,16 @@ void TileSet::Bind() } } +void TileSet::Unbind() +{ +#if defined USE_D3D9 || defined _XBOX + g_d3ddevice->SetTexture(0, NULL); +#else + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, 0); +#endif +} + void TileSet::BlitTile(uint32_t id, vec3 pos, int o, vec2 scale, float *vertex, float *texture) { diff --git a/src/tileset.h b/src/tileset.h index 8f4fae3b..f738872e 100644 --- a/src/tileset.h +++ b/src/tileset.h @@ -44,6 +44,7 @@ public: ivec2 GetCount() const; ivec2 GetSize(int tileid) const; void Bind(); + void Unbind(); void BlitTile(uint32_t id, vec3 pos, int o, vec2 scale, float *vertex, float *texture); diff --git a/src/video.cpp b/src/video.cpp index 7ee21828..90038591 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -14,13 +14,14 @@ #include -#if defined USE_D3D9 -# include -#elif defined _XBOX +#if defined _XBOX # include # undef near /* Fuck Microsoft */ # undef far /* Fuck Microsoft again */ #elif defined _WIN32 +# if defined USE_D3D9 +# include +# endif # define WIN32_LEAN_AND_MEAN # include # undef near /* Fuck Microsoft */ diff --git a/test/tutorial/tut02.cpp b/test/tutorial/tut02.cpp index 10b29c94..b21a4794 100644 --- a/test/tutorial/tut02.cpp +++ b/test/tutorial/tut02.cpp @@ -204,6 +204,7 @@ public: glVertexPointer(3, GL_FLOAT, 0, m_vertices); glDisableClientState(GL_VERTEX_ARRAY); #endif + m_vdecl->Unbind(); } private: