Bläddra i källkod

gpu: add an Unbind() method for textures for clean up. Unfortunately

the Scene code still breaks Direct3D rendering.
legacy
Sam Hocevar sam 13 år sedan
förälder
incheckning
f7770f7387
6 ändrade filer med 23 tillägg och 42 borttagningar
  1. +1
    -23
      src/gradient.cpp
  2. +6
    -16
      src/scene.cpp
  3. +10
    -0
      src/tileset.cpp
  4. +1
    -0
      src/tileset.h
  5. +4
    -3
      src/video.cpp
  6. +1
    -0
      test/tutorial/tut02.cpp

+ 1
- 23
src/gradient.cpp Visa fil

@@ -14,29 +14,11 @@

#include <cmath>

#ifdef WIN32
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# if defined USE_D3D9
# include <algorithm>
using std::min;
using std::max;
# include <d3d9.h>
# include <d3dx9shader.h>
# 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()


+ 6
- 16
src/scene.cpp Visa fil

@@ -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);


+ 10
- 0
src/tileset.cpp Visa fil

@@ -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)
{


+ 1
- 0
src/tileset.h Visa fil

@@ -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);



+ 4
- 3
src/video.cpp Visa fil

@@ -14,13 +14,14 @@

#include <cmath>

#if defined USE_D3D9
# include <d3d9.h>
#elif defined _XBOX
#if defined _XBOX
# include <xtl.h>
# undef near /* Fuck Microsoft */
# undef far /* Fuck Microsoft again */
#elif defined _WIN32
# if defined USE_D3D9
# include <d3d9.h>
# endif
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# undef near /* Fuck Microsoft */


+ 1
- 0
test/tutorial/tut02.cpp Visa fil

@@ -204,6 +204,7 @@ public:
glVertexPointer(3, GL_FLOAT, 0, m_vertices);
glDisableClientState(GL_VERTEX_ARRAY);
#endif
m_vdecl->Unbind();
}

private:


Laddar…
Avbryt
Spara