瀏覽代碼

gpu: replace exit(0) in D3D error checks with lol::Abort().

legacy
Sam Hocevar sam 13 年之前
父節點
當前提交
48c7070243
共有 10 個文件被更改,包括 79 次插入35 次删除
  1. +1
    -1
      src/Makefile.am
  2. +1
    -0
      src/core.h
  3. +32
    -0
      src/debug/debug.h
  4. +22
    -11
      src/gpu/vertexbuffer.cpp
  5. +6
    -3
      src/platform/sdl/sdlapp.cpp
  6. +1
    -11
      src/scene.cpp
  7. +3
    -2
      src/video.cpp
  8. +1
    -1
      test/tutorial/tut01.cpp
  9. +11
    -6
      test/tutorial/tut02.cpp
  10. +1
    -0
      win32/lolcore.vcxproj

+ 1
- 1
src/Makefile.am 查看文件

@@ -2,7 +2,7 @@
noinst_LIBRARIES = liblol.a noinst_LIBRARIES = liblol.a


liblol_a_SOURCES = \ liblol_a_SOURCES = \
core.h tiler.cpp tiler.h dict.cpp dict.h \ core.h tiler.cpp tiler.h dict.cpp dict.h debug/debug.h \
audio.cpp audio.h scene.cpp scene.h font.cpp font.h layer.cpp layer.h \ audio.cpp audio.h scene.cpp scene.h font.cpp font.h layer.cpp layer.h \
map.cpp map.h entity.cpp entity.h ticker.cpp ticker.h lolgl.h \ map.cpp map.h entity.cpp entity.h ticker.cpp ticker.h lolgl.h \
tileset.cpp tileset.h forge.cpp forge.h video.cpp video.h log.cpp log.h \ tileset.cpp tileset.h forge.cpp forge.h video.cpp video.h log.cpp log.h \


+ 1
- 0
src/core.h 查看文件

@@ -71,6 +71,7 @@ static inline int isnan(float f)
#include "thread/thread.h" #include "thread/thread.h"


// Static classes // Static classes
#include "debug/debug.h"
#include "log.h" #include "log.h"
#include "platform.h" #include "platform.h"
#include "video.h" #include "video.h"


+ 32
- 0
src/debug/debug.h 查看文件

@@ -0,0 +1,32 @@
//
// Lol Engine
//
// Copyright: (c) 2010-2012 Sam Hocevar <sam@hocevar.net>
// This program is free software; you can redistribute it and/or
// modify it under the terms of the Do What The Fuck You Want To
// Public License, Version 2, as published by Sam Hocevar. See
// http://sam.zoy.org/projects/COPYING.WTFPL for more details.
//

//
// Debug utilities
// ---------------
//

#if !defined __LOL_DEBUG_H__
#define __LOL_DEBUG_H__

#include "entity.h"

namespace lol
{

static void Abort()
{
*(int *)NULL = 0;
}

} /* namespace lol */

#endif // __LOL_DEBUG_H__


+ 22
- 11
src/gpu/vertexbuffer.cpp 查看文件

@@ -97,7 +97,8 @@ VertexDeclaration::~VertexDeclaration()
D3DVertexDeclaration *vdecl = (D3DVertexDeclaration *)m_data; D3DVertexDeclaration *vdecl = (D3DVertexDeclaration *)m_data;
# endif # endif


vdecl->Release(); if (FAILED(vdecl->Release()))
Abort();
#else #else


#endif #endif
@@ -112,7 +113,8 @@ void VertexDeclaration::Bind()
D3DVertexDeclaration *vdecl = (D3DVertexDeclaration *)m_data; D3DVertexDeclaration *vdecl = (D3DVertexDeclaration *)m_data;
# endif # endif


g_d3ddevice->SetVertexDeclaration(vdecl); if (FAILED(g_d3ddevice->SetVertexDeclaration(vdecl)))
Abort();
#else #else
/* FIXME: Nothing to do? */ /* FIXME: Nothing to do? */
#endif #endif
@@ -121,11 +123,13 @@ void VertexDeclaration::Bind()
void VertexDeclaration::DrawElements(MeshPrimitive type, int skip, int count) void VertexDeclaration::DrawElements(MeshPrimitive type, int skip, int count)
{ {
#if defined _XBOX || defined USE_D3D9 #if defined _XBOX || defined USE_D3D9
g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); if (FAILED(g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW)))
Abort();
switch (type) switch (type)
{ {
case MeshPrimitive::Triangles: case MeshPrimitive::Triangles:
g_d3ddevice->DrawPrimitive(D3DPT_TRIANGLELIST, skip, count); if (FAILED(g_d3ddevice->DrawPrimitive(D3DPT_TRIANGLELIST, skip, count)))
Abort();
break; break;
} }
#else #else
@@ -193,7 +197,10 @@ void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attr1,
/* Now we know the stream index and the element stride */ /* Now we know the stream index and the element stride */
/* FIXME: precompute most of the crap above! */ /* FIXME: precompute most of the crap above! */
if (stream >= 0) if (stream >= 0)
g_d3ddevice->SetStreamSource(stream, vb->m_data->m_vbo, 0, stride); {
if (FAILED(g_d3ddevice->SetStreamSource(stream, vb->m_data->m_vbo, 0, stride)))
Abort();
}
#else #else
glBindBuffer(GL_ARRAY_BUFFER, vb->m_data->m_vbo); glBindBuffer(GL_ARRAY_BUFFER, vb->m_data->m_vbo);
ShaderAttrib l[12] = { attr1, attr2, attr3, attr4, attr5, attr6, ShaderAttrib l[12] = { attr1, attr2, attr3, attr4, attr5, attr6,
@@ -334,7 +341,8 @@ void VertexDeclaration::Initialize()
D3DVertexDeclaration *vdecl; D3DVertexDeclaration *vdecl;
# endif # endif


g_d3ddevice->CreateVertexDeclaration(elements, &vdecl); if (FAILED(g_d3ddevice->CreateVertexDeclaration(elements, &vdecl)))
Abort();


m_data = vdecl; m_data = vdecl;
#else #else
@@ -365,8 +373,9 @@ VertexBuffer::VertexBuffer(size_t size)
: m_data(new VertexBufferData) : m_data(new VertexBufferData)
{ {
#if defined USE_D3D9 || defined _XBOX #if defined USE_D3D9 || defined _XBOX
g_d3ddevice->CreateVertexBuffer(size, D3DUSAGE_WRITEONLY, NULL, if (FAILED(g_d3ddevice->CreateVertexBuffer(size, D3DUSAGE_WRITEONLY, NULL,
D3DPOOL_MANAGED, &m_data->m_vbo, NULL); D3DPOOL_MANAGED, &m_data->m_vbo, NULL)))
Abort();
new uint8_t[size]; new uint8_t[size];
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ #elif !defined __CELLOS_LV2__ && !defined __ANDROID__
glGenBuffers(1, &m_data->m_vbo); glGenBuffers(1, &m_data->m_vbo);
@@ -378,7 +387,8 @@ VertexBuffer::VertexBuffer(size_t size)
VertexBuffer::~VertexBuffer() VertexBuffer::~VertexBuffer()
{ {
#if defined USE_D3D9 || defined _XBOX #if defined USE_D3D9 || defined _XBOX
m_data->m_vbo->Release(); if (FAILED(m_data->m_vbo->Release()))
Abort();
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ #elif !defined __CELLOS_LV2__ && !defined __ANDROID__
glDeleteBuffers(1, &m_data->m_vbo); glDeleteBuffers(1, &m_data->m_vbo);
delete[] m_data->m_memory; delete[] m_data->m_memory;
@@ -390,7 +400,7 @@ void *VertexBuffer::Lock(size_t offset, size_t size)
#if defined USE_D3D9 || defined _XBOX #if defined USE_D3D9 || defined _XBOX
void *ret; void *ret;
if (FAILED(m_data->m_vbo->Lock(offset, size, (void **)&ret, 0))) if (FAILED(m_data->m_vbo->Lock(offset, size, (void **)&ret, 0)))
exit(0); Abort();
return ret; return ret;
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ #elif !defined __CELLOS_LV2__ && !defined __ANDROID__
return m_data->m_memory + offset; return m_data->m_memory + offset;
@@ -400,7 +410,8 @@ void *VertexBuffer::Lock(size_t offset, size_t size)
void VertexBuffer::Unlock() void VertexBuffer::Unlock()
{ {
#if defined USE_D3D9 || defined _XBOX #if defined USE_D3D9 || defined _XBOX
m_data->m_vbo->Unlock(); if (FAILED(m_data->m_vbo->Unlock()))
Abort();
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ #elif !defined __CELLOS_LV2__ && !defined __ANDROID__
glBindBuffer(GL_ARRAY_BUFFER, m_data->m_vbo); glBindBuffer(GL_ARRAY_BUFFER, m_data->m_vbo);
glBufferData(GL_ARRAY_BUFFER, m_data->m_size, m_data->m_memory, glBufferData(GL_ARRAY_BUFFER, m_data->m_size, m_data->m_memory,


+ 6
- 3
src/platform/sdl/sdlapp.cpp 查看文件

@@ -102,14 +102,17 @@ void SdlApp::Run()
while (!Ticker::Finished()) while (!Ticker::Finished())
{ {
#if defined USE_SDL && defined USE_D3D9 #if defined USE_SDL && defined USE_D3D9
g_d3ddevice->BeginScene(); if (FAILED(g_d3ddevice->BeginScene()))
Abort();
#endif #endif
/* Tick the renderer, show the frame and clamp to desired framerate. */ /* Tick the renderer, show the frame and clamp to desired framerate. */
Ticker::TickDraw(); Ticker::TickDraw();
#if defined USE_SDL #if defined USE_SDL
# if defined USE_D3D9 # if defined USE_D3D9
g_d3ddevice->EndScene(); if (FAILED(g_d3ddevice->EndScene()))
g_d3ddevice->Present(NULL, NULL, NULL, NULL); Abort();
if (FAILED(g_d3ddevice->Present(NULL, NULL, NULL, NULL)))
Abort();
# else # else
SDL_GL_SwapBuffers(); SDL_GL_SwapBuffers();
# endif # endif


+ 1
- 11
src/scene.cpp 查看文件

@@ -18,22 +18,11 @@
#ifdef WIN32 #ifdef WIN32
# define WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN
# include <windows.h> # include <windows.h>
# if defined USE_D3D9
# define FAR
# define NEAR
# include <d3d9.h>
# endif
#endif #endif


#include "core.h" #include "core.h"
#include "lolgl.h" #include "lolgl.h"


#if defined USE_D3D9
extern IDirect3DDevice9 *g_d3ddevice;
#elif defined _XBOX
extern D3DDevice *g_d3ddevice;
#endif

namespace lol namespace lol
{ {


@@ -106,6 +95,7 @@ Scene::~Scene()
for (int i = 0; i < data->nbufs; i++) for (int i = 0; i < data->nbufs; i++)
delete data->bufs[i]; delete data->bufs[i];
free(data->bufs); free(data->bufs);

delete data->m_vdecl; delete data->m_vdecl;
delete data; delete data;
} }


+ 3
- 2
src/video.cpp 查看文件

@@ -228,9 +228,10 @@ void Video::Clear()
{ {
ivec2 size = GetSize(); ivec2 size = GetSize();
#if defined USE_D3D9 || defined _XBOX #if defined USE_D3D9 || defined _XBOX
VideoData::d3d_dev->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER if (FAILED(VideoData::d3d_dev->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER
| D3DCLEAR_STENCIL, | D3DCLEAR_STENCIL,
VideoData::clear_color, 1.0f, 0); VideoData::clear_color, 1.0f, 0)))
Abort();
#else #else
glViewport(0, 0, size.x, size.y); glViewport(0, 0, size.x, size.y);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);


+ 1
- 1
test/tutorial/tut01.cpp 查看文件

@@ -86,8 +86,8 @@ public:
} }


m_shader->Bind(); m_shader->Bind();
m_vdecl->Bind();
m_vdecl->SetStream(m_vbo, m_coord); m_vdecl->SetStream(m_vbo, m_coord);
m_vdecl->Bind();
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 1); m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 1);
m_vdecl->Unbind(); m_vdecl->Unbind();
} }


+ 11
- 6
test/tutorial/tut02.cpp 查看文件

@@ -167,9 +167,9 @@ public:
#elif defined _XBOX || defined USE_D3D9 #elif defined _XBOX || defined USE_D3D9
int16_t *indices; int16_t *indices;
if (FAILED(g_d3ddevice->CreateIndexBuffer(sizeof(m_indices), D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_MANAGED, &m_ibo, NULL))) if (FAILED(g_d3ddevice->CreateIndexBuffer(sizeof(m_indices), D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_MANAGED, &m_ibo, NULL)))
exit(0); Abort();
if (FAILED(m_ibo->Lock(0, 0, (void **)&indices, 0))) if (FAILED(m_ibo->Lock(0, 0, (void **)&indices, 0)))
exit(0); Abort();
memcpy(indices, m_indices, sizeof(m_indices)); memcpy(indices, m_indices, sizeof(m_indices));
m_ibo->Unlock(); m_ibo->Unlock();
#else #else
@@ -180,16 +180,21 @@ public:
m_ready = true; m_ready = true;
} }


Video::SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));

m_shader->Bind(); m_shader->Bind();
m_shader->SetUniform(m_mvp, m_matrix); m_shader->SetUniform(m_mvp, m_matrix);
m_vdecl->Bind();
m_vdecl->SetStream(m_vbo, m_coord); m_vdecl->SetStream(m_vbo, m_coord);
m_vdecl->SetStream(m_cbo, m_color); m_vdecl->SetStream(m_cbo, m_color);
m_vdecl->Bind();


#if defined _XBOX || defined USE_D3D9 #if defined _XBOX || defined USE_D3D9
g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); if (FAILED(g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW)))
g_d3ddevice->SetIndices(m_ibo); Abort();
g_d3ddevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 0, 0, sizeof(m_indices) / sizeof(*m_indices)); if (FAILED(g_d3ddevice->SetIndices(m_ibo)))
Abort();
if (FAILED(g_d3ddevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 0, 0, sizeof(m_indices) / sizeof(*m_indices))))
Abort();
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ #elif !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo);
int size; int size;


+ 1
- 0
win32/lolcore.vcxproj 查看文件

@@ -133,6 +133,7 @@
<ClInclude Include="..\src\debug\record.h" /> <ClInclude Include="..\src\debug\record.h" />
<ClInclude Include="..\src\debug\sphere.h" /> <ClInclude Include="..\src\debug\sphere.h" />
<ClInclude Include="..\src\debug\stats.h" /> <ClInclude Include="..\src\debug\stats.h" />
<ClInclude Include="..\src\debug\debug.h" />
<ClInclude Include="..\src\dict.h" /> <ClInclude Include="..\src\dict.h" />
<ClInclude Include="..\src\eglapp.h" /> <ClInclude Include="..\src\eglapp.h" />
<ClInclude Include="..\src\emitter.h" /> <ClInclude Include="..\src\emitter.h" />


||||||
x
 
000:0
Loading…
取消
儲存