@@ -15,25 +15,180 @@ | |||
#include "core.h" | |||
#include "lolgl.h" | |||
#if defined _WIN32 && defined USE_D3D9 | |||
# define FAR | |||
# define NEAR | |||
# include <d3d9.h> | |||
#endif | |||
using namespace std; | |||
#if defined USE_D3D9 | |||
extern IDirect3DDevice9 *g_d3ddevice; | |||
#elif defined _XBOX | |||
extern D3DDevice *g_d3ddevice; | |||
#endif | |||
namespace lol | |||
{ | |||
/* For some reason defining this in the .h leads to duplicate definitions | |||
* between the executable and the static library. */ | |||
template<> void VertexBuffer::AddStream<void>(int n, int index) | |||
VertexStreamBase const VertexStreamBase::Empty; | |||
void VertexDeclaration::Initialize() | |||
{ | |||
(void)index; | |||
m_streams[n].size = 0; | |||
#if defined _XBOX || defined USE_D3D9 | |||
static D3DVERTEXELEMENT9 const end_element[] = { D3DDECL_END() }; | |||
static D3DECLTYPE const X = D3DDECLTYPE_UNUSED; | |||
static D3DECLTYPE const tlut[] = | |||
{ | |||
D3DDECLTYPE_UNUSED, | |||
X, D3DDECLTYPE_FLOAT16_2, X, D3DDECLTYPE_FLOAT16_4, /* half */ | |||
D3DDECLTYPE_FLOAT1, D3DDECLTYPE_FLOAT2, D3DDECLTYPE_FLOAT3, | |||
D3DDECLTYPE_FLOAT4, /* float */ | |||
X, X, X, X, /* double */ | |||
X, X, X, X, /* int8_t */ | |||
X, X, X, D3DDECLTYPE_UBYTE4, /* uint8_t */ | |||
X, D3DDECLTYPE_SHORT2N, X, D3DDECLTYPE_SHORT4N, /* int16_t */ | |||
X, D3DDECLTYPE_USHORT2N, X, D3DDECLTYPE_USHORT4N, /* uint16_t */ | |||
X, X, X, X, /* int32_t */ | |||
X, X, X, X, /* int64_t */ | |||
}; | |||
static D3DDECLUSAGE const ulut[] = | |||
{ | |||
D3DDECLUSAGE_POSITION, | |||
D3DDECLUSAGE_BLENDWEIGHT, | |||
D3DDECLUSAGE_BLENDINDICES, | |||
D3DDECLUSAGE_NORMAL, | |||
D3DDECLUSAGE_PSIZE, | |||
D3DDECLUSAGE_TEXCOORD, | |||
D3DDECLUSAGE_TANGENT, | |||
D3DDECLUSAGE_BINORMAL, | |||
D3DDECLUSAGE_TESSFACTOR, | |||
D3DDECLUSAGE_POSITIONT, | |||
D3DDECLUSAGE_COLOR, | |||
D3DDECLUSAGE_FOG, | |||
D3DDECLUSAGE_DEPTH, | |||
D3DDECLUSAGE_SAMPLE, | |||
}; | |||
D3DVERTEXELEMENT9 elements[12 + 1]; | |||
int nstreams = 0; | |||
while (m_streams[nstreams].size) | |||
{ | |||
elements[nstreams].Stream = m_streams[nstreams].index; | |||
elements[nstreams].Offset = 0; | |||
for (int i = 0; i < nstreams; i++) | |||
elements[nstreams].Offset += m_streams[nstreams].size; | |||
if (m_streams[nstreams].type >= 0 | |||
&& m_streams[nstreams].type < sizeof(tlut) / sizeof(*tlut)) | |||
elements[nstreams].Type = tlut[m_streams[nstreams].type]; | |||
else | |||
elements[nstreams].Type = D3DDECLTYPE_UNUSED; | |||
elements[nstreams].Method = D3DDECLMETHOD_DEFAULT; | |||
if (m_streams[nstreams].usage >= 0 | |||
&& m_streams[nstreams].usage < sizeof(ulut) / sizeof(*ulut)) | |||
elements[nstreams].Type = ulut[m_streams[nstreams].usage]; | |||
else | |||
elements[nstreams].Type = D3DDECLUSAGE_POSITION; | |||
elements[nstreams].UsageIndex = 0; | |||
for (int i = 0; i < nstreams; i++) | |||
if (elements[i].Stream == elements[nstreams].Stream | |||
&& elements[i].Usage == elements[nstreams].Usage) | |||
elements[nstreams].UsageIndex++; | |||
nstreams++; | |||
} | |||
elements[nstreams] = end_element[0]; | |||
# if defined USE_D3D9 | |||
IDirect3DVertexDeclaration9 *vdecl; | |||
# elif defined _XBOX | |||
D3DVertexDeclaration *vdecl; | |||
# endif | |||
g_d3ddevice->CreateVertexDeclaration(elements, &vdecl); | |||
m_data = vdecl; | |||
#else | |||
#endif | |||
} | |||
void VertexBuffer::Initialize() | |||
VertexDeclaration::~VertexDeclaration() | |||
{ | |||
#if defined _XBOX || defined USE_D3D9 | |||
# if defined USE_D3D9 | |||
IDirect3DVertexDeclaration9 *vdecl = (IDirect3DVertexDeclaration9 *)m_data; | |||
# elif defined _XBOX | |||
D3DVertexDeclaration *vdecl = (D3DVertexDeclaration *)m_data; | |||
# endif | |||
vdecl->Release(); | |||
#else | |||
#endif | |||
} | |||
void VertexDeclaration::Bind() | |||
{ | |||
#if defined _XBOX || defined USE_D3D9 | |||
# if defined USE_D3D9 | |||
IDirect3DVertexDeclaration9 *vdecl = (IDirect3DVertexDeclaration9 *)m_data; | |||
# elif defined _XBOX | |||
D3DVertexDeclaration *vdecl = (D3DVertexDeclaration *)m_data; | |||
# endif | |||
g_d3ddevice->SetVertexDeclaration(vdecl); | |||
#else | |||
#endif | |||
} | |||
VertexDeclaration::VertexDeclaration(VertexStreamBase const &s1, | |||
VertexStreamBase const &s2, | |||
VertexStreamBase const &s3, | |||
VertexStreamBase const &s4, | |||
VertexStreamBase const &s5, | |||
VertexStreamBase const &s6, | |||
VertexStreamBase const &s7, | |||
VertexStreamBase const &s8, | |||
VertexStreamBase const &s9, | |||
VertexStreamBase const &s10, | |||
VertexStreamBase const &s11, | |||
VertexStreamBase const &s12) : m_count(0) | |||
{ | |||
if (&s1 != &VertexStreamBase::Empty) AddStream(s1); | |||
if (&s2 != &VertexStreamBase::Empty) AddStream(s2); | |||
if (&s3 != &VertexStreamBase::Empty) AddStream(s3); | |||
if (&s4 != &VertexStreamBase::Empty) AddStream(s4); | |||
if (&s5 != &VertexStreamBase::Empty) AddStream(s5); | |||
if (&s6 != &VertexStreamBase::Empty) AddStream(s6); | |||
if (&s7 != &VertexStreamBase::Empty) AddStream(s7); | |||
if (&s8 != &VertexStreamBase::Empty) AddStream(s8); | |||
if (&s9 != &VertexStreamBase::Empty) AddStream(s9); | |||
if (&s10 != &VertexStreamBase::Empty) AddStream(s10); | |||
if (&s11 != &VertexStreamBase::Empty) AddStream(s11); | |||
if (&s12 != &VertexStreamBase::Empty) AddStream(s12); | |||
Initialize(); | |||
} | |||
void VertexDeclaration::AddStream(VertexStreamBase const &s) | |||
{ | |||
int index = m_count ? m_streams[m_count - 1].index + 1 : 0; | |||
for (int i = 0; s.m_streams[i].size; i++) | |||
{ | |||
m_streams[m_count].stream_type = s.m_streams[i].stream_type; | |||
m_streams[m_count].usage = s.m_streams[i].usage; | |||
m_streams[m_count].size = s.m_streams[i].size; | |||
m_streams[m_count].index = index; | |||
m_count++; | |||
} | |||
} | |||
} /* namespace lol */ | |||
@@ -21,89 +21,143 @@ | |||
namespace lol | |||
{ | |||
#if 0 | |||
VertexBuffer(0, LOL_TYPE_VEC2 | LOL_USAGE_TEXTURE(0), | |||
LOL_TYPE_FLOAT | LOL_USAGE_POSITION(0), | |||
1, LOL_TYPE_FLOAT | LOL_USAGE_TEXCOORD(0), | |||
2, LOL_TYPE_FLOAT | LOL_USAGE_TEXCOORD(1)); | |||
VertexBuffer(VertexStream<vec2, LOL_USAGE_TEXTURE(0) | |||
float, Texture( | |||
#endif | |||
class VertexBuffer | |||
struct VertexUsage | |||
{ | |||
public: | |||
VertexBuffer(VertexBuffer const& that) | |||
enum Value | |||
{ | |||
memcpy(this, &that, sizeof(*this)); | |||
/* Now call the platform-specific initialisation code */ | |||
Initialize(); | |||
Position = 0, | |||
BlendWeight, | |||
BlendIndices, | |||
Normal, | |||
PSize, | |||
TexCoord, | |||
Tangent, | |||
Binormal, | |||
TessFactor, | |||
PositionT, | |||
Color, | |||
Fog, | |||
Depth, | |||
Sample, | |||
} | |||
m_value; | |||
~VertexBuffer() {} | |||
inline VertexUsage(Value v) { m_value = v; } | |||
inline operator Value() { return m_value; } | |||
}; | |||
protected: | |||
VertexBuffer() {} | |||
class VertexStreamBase | |||
{ | |||
friend class VertexDeclaration; | |||
protected: | |||
enum | |||
{ | |||
VBO_TYPE_VOID = 0, | |||
VBO_TYPE_FLOAT, | |||
VBO_TYPE_VEC2, | |||
VBO_TYPE_VEC3, | |||
VBO_TYPE_VEC4, | |||
VBO_TYPE_I16VEC4, | |||
VBO_TYPE_U8VEC4, | |||
Typevoid = 0, | |||
Typehalf, Typef16vec2, Typef16vec3, Typef16vec4, | |||
Typefloat, Typevec2, Typevec3, Typevec4, | |||
Typedouble, Typef64vec2, Typef64vec3, Typef64vec4, | |||
Typeuint8_t, Typeu8vec2, Typeu8vec3, Typeu8vec4, | |||
Typeint8_t, Typei8vec2, Typei8vec3, Typei8vec4, | |||
Typeuint16_t, Typeu16vec2, Typeu16vec3, Typeu16vec4, | |||
Typeint16_t, Typei16vec2, Typei16vec3, Typei16vec4, | |||
Typeuint32_t, Typeuvec2, Typeuvec3, Typeuvec4, | |||
Typeint32_t, Typeivec2, Typeivec3, Typeivec4, | |||
}; | |||
static uint8_t GetType(void *x) { (void)x; return VBO_TYPE_VOID; } | |||
static uint8_t GetType(float *x) { (void)x; return VBO_TYPE_FLOAT; } | |||
static uint8_t GetType(vec2 *x) { (void)x; return VBO_TYPE_VEC2; } | |||
static uint8_t GetType(vec3 *x) { (void)x; return VBO_TYPE_VEC3; } | |||
static uint8_t GetType(vec4 *x) { (void)x; return VBO_TYPE_VEC4; } | |||
static uint8_t GetType(i16vec4 *x) { (void)x; return VBO_TYPE_I16VEC4; } | |||
static uint8_t GetType(u8vec4 *x) { (void)x; return VBO_TYPE_U8VEC4; } | |||
struct { uint8_t stream_type, index, size; } m_streams[12 + 1]; | |||
template<typename T> void AddStream(int n, int index) | |||
#define LOL_TYPE(T) \ | |||
static uint8_t GetType(T *x) { (void)x; return Type##T; } | |||
LOL_TYPE(void) | |||
LOL_TYPE(half) LOL_TYPE(f16vec2) LOL_TYPE(f16vec3) LOL_TYPE(f16vec4) | |||
LOL_TYPE(float) LOL_TYPE(vec2) LOL_TYPE(vec3) LOL_TYPE(vec4) | |||
LOL_TYPE(double) LOL_TYPE(f64vec2) LOL_TYPE(f64vec3) LOL_TYPE(f64vec4) | |||
LOL_TYPE(uint8_t) LOL_TYPE(u8vec2) LOL_TYPE(u8vec3) LOL_TYPE(u8vec4) | |||
LOL_TYPE(int8_t) LOL_TYPE(i8vec2) LOL_TYPE(i8vec3) LOL_TYPE(i8vec4) | |||
LOL_TYPE(uint16_t) LOL_TYPE(u16vec2) LOL_TYPE(u16vec3) LOL_TYPE(u16vec4) | |||
LOL_TYPE(int16_t) LOL_TYPE(i16vec2) LOL_TYPE(i16vec3) LOL_TYPE(i16vec4) | |||
LOL_TYPE(uint32_t) LOL_TYPE(uvec2) LOL_TYPE(uvec3) LOL_TYPE(uvec4) | |||
LOL_TYPE(int32_t) LOL_TYPE(ivec2) LOL_TYPE(ivec3) LOL_TYPE(ivec4) | |||
#undef LOL_TYPE | |||
template<typename T> inline void AddStream(int n, int usage) | |||
{ | |||
m_streams[n].stream_type = GetType((T *)NULL); | |||
m_streams[n].index = index; | |||
m_streams[n].usage = usage; | |||
m_streams[n].size = sizeof(T); | |||
} | |||
VertexStreamBase() {} | |||
private: | |||
void Initialize(); | |||
struct { uint8_t stream_type, usage, size; } m_streams[12 + 1]; | |||
static VertexStreamBase const Empty; | |||
}; | |||
template<> void VertexBuffer::AddStream<void>(int n, int index); | |||
template<> | |||
inline void VertexStreamBase::AddStream<void>(int n, int usage) | |||
{ | |||
(void)usage; | |||
m_streams[n].size = 0; | |||
} | |||
template<typename T1 = void, typename T2 = void, typename T3 = void, | |||
typename T4 = void, typename T5 = void, typename T6 = void, | |||
typename T7 = void, typename T8 = void, typename T9 = void, | |||
typename T10 = void, typename T11 = void, typename T12 = void> | |||
class VertexDeclaration : public VertexBuffer | |||
class VertexStream : public VertexStreamBase | |||
{ | |||
public: | |||
/* Arguments are the stream index; default to zero */ | |||
VertexDeclaration(int s1 = 0, int s2 = 0, int s3 = 0, | |||
int s4 = 0, int s5 = 0, int s6 = 0, | |||
int s7 = 0, int s8 = 0, int s9 = 0, | |||
int s10 = 0, int s11 = 0, int s12 = 0) | |||
inline VertexStream(VertexUsage u1, | |||
VertexUsage u2 = VertexUsage::Position, | |||
VertexUsage u3 = VertexUsage::Position, | |||
VertexUsage u4 = VertexUsage::Position, | |||
VertexUsage u5 = VertexUsage::Position, | |||
VertexUsage u6 = VertexUsage::Position, | |||
VertexUsage u7 = VertexUsage::Position, | |||
VertexUsage u8 = VertexUsage::Position, | |||
VertexUsage u9 = VertexUsage::Position, | |||
VertexUsage u10 = VertexUsage::Position, | |||
VertexUsage u11 = VertexUsage::Position, | |||
VertexUsage u12 = VertexUsage::Position) | |||
{ | |||
for (int i = 0; i < 12 + 1; i++) | |||
m_streams[i].stream_type = VBO_TYPE_VOID; | |||
AddStream<T1>(0, s1); AddStream<T2>(1, s2); AddStream<T3>(2, s3); | |||
AddStream<T4>(3, s4); AddStream<T5>(4, s5); AddStream<T6>(5, s6); | |||
AddStream<T7>(6, s7); AddStream<T8>(7, s8); AddStream<T9>(8, s9); | |||
AddStream<T10>(9, s10); AddStream<T11>(10, s11); AddStream<T12>(11, s12); | |||
AddStream<T1>(0, u1); AddStream<T2>(1, u2); | |||
AddStream<T3>(2, u3); AddStream<T4>(3, u4); | |||
AddStream<T5>(4, u5); AddStream<T6>(5, u6); | |||
AddStream<T7>(6, u7); AddStream<T8>(7, u8); | |||
AddStream<T9>(8, u9); AddStream<T10>(9, u10); | |||
AddStream<T11>(10, u11); AddStream<T12>(11, u12); | |||
} | |||
}; | |||
class VertexDeclaration | |||
{ | |||
public: | |||
VertexDeclaration(VertexStreamBase const &s1, | |||
VertexStreamBase const &s2 = VertexStreamBase::Empty, | |||
VertexStreamBase const &s3 = VertexStreamBase::Empty, | |||
VertexStreamBase const &s4 = VertexStreamBase::Empty, | |||
VertexStreamBase const &s5 = VertexStreamBase::Empty, | |||
VertexStreamBase const &s6 = VertexStreamBase::Empty, | |||
VertexStreamBase const &s7 = VertexStreamBase::Empty, | |||
VertexStreamBase const &s8 = VertexStreamBase::Empty, | |||
VertexStreamBase const &s9 = VertexStreamBase::Empty, | |||
VertexStreamBase const &s10 = VertexStreamBase::Empty, | |||
VertexStreamBase const &s11 = VertexStreamBase::Empty, | |||
VertexStreamBase const &s12 = VertexStreamBase::Empty); | |||
~VertexDeclaration(); | |||
void Bind(); | |||
private: | |||
void Initialize(); | |||
void AddStream(VertexStreamBase const &); | |||
struct { uint8_t stream_type, index, usage, size; } m_streams[12 + 1]; | |||
int m_count; | |||
void *m_data; | |||
}; | |||
} /* namespace lol */ | |||
@@ -61,7 +61,6 @@ public: | |||
if (!m_ready) | |||
{ | |||
VertexBuffer vb(VertexDeclaration<vec2, float, ivec3>(0, 0, 1)); | |||
@@ -114,12 +113,9 @@ public: | |||
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ && !defined _XBOX && !defined USE_D3D9 | |||
/* Method 2: upload vertex information at each frame */ | |||
#elif defined _XBOX || defined USE_D3D9 | |||
D3DVERTEXELEMENT9 const elements[2] = | |||
{ | |||
{ 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, | |||
D3DDECL_END() | |||
}; | |||
g_d3ddevice->CreateVertexDeclaration(elements, &m_vdecl); | |||
m_vdecl = | |||
new VertexDeclaration(VertexStream<vec2>(VertexUsage::Position)); | |||
if (FAILED(g_d3ddevice->CreateVertexBuffer(sizeof(m_vertices), D3DUSAGE_WRITEONLY, NULL, D3DPOOL_MANAGED, &m_vbo, NULL))) | |||
exit(0); | |||
@@ -135,9 +131,9 @@ public: | |||
} | |||
m_shader->Bind(); | |||
m_vdecl->Bind(); | |||
#if defined _XBOX || defined USE_D3D9 | |||
g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); | |||
g_d3ddevice->SetVertexDeclaration(m_vdecl); | |||
g_d3ddevice->SetStreamSource(0, m_vbo, 0, sizeof(*m_vertices)); | |||
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | |||
glBindBuffer(GL_ARRAY_BUFFER, m_vbo); | |||
@@ -174,11 +170,10 @@ public: | |||
private: | |||
vec2 m_vertices[3]; | |||
Shader *m_shader; | |||
VertexDeclaration *m_vdecl; | |||
#if defined USE_D3D9 | |||
IDirect3DVertexDeclaration9 *m_vdecl; | |||
IDirect3DVertexBuffer9 *m_vbo; | |||
#elif defined _XBOX | |||
D3DVertexDeclaration *m_vdecl; | |||
D3DVertexBuffer *m_vbo; | |||
#else | |||
int m_attrib; | |||
@@ -145,6 +145,9 @@ public: | |||
m_mvp = m_shader->GetUniformLocation("in_Matrix"); | |||
m_ready = true; | |||
m_vdecl = | |||
new VertexDeclaration(VertexStream<vec3>(VertexUsage::Position), | |||
VertexStream<vec3>(VertexUsage::Color)); | |||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ && !defined _XBOX && !defined USE_D3D9 | |||
/* Method 1: store vertex buffer on the GPU memory */ | |||
glGenBuffers(1, &m_vbo); | |||
@@ -160,14 +163,6 @@ public: | |||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(m_indices), m_indices, | |||
GL_STATIC_DRAW); | |||
#elif defined _XBOX || defined USE_D3D9 | |||
D3DVERTEXELEMENT9 const elements[] = | |||
{ | |||
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, | |||
{ 1, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 }, | |||
D3DDECL_END() | |||
}; | |||
g_d3ddevice->CreateVertexDeclaration(elements, &m_vdecl); | |||
if (FAILED(g_d3ddevice->CreateVertexBuffer(sizeof(m_vertices), D3DUSAGE_WRITEONLY, NULL, D3DPOOL_MANAGED, &m_vbo, NULL))) | |||
exit(0); | |||
@@ -202,9 +197,9 @@ public: | |||
m_shader->Bind(); | |||
m_shader->SetUniform(m_mvp, m_matrix); | |||
m_vdecl->Bind(); | |||
#if defined _XBOX || defined USE_D3D9 | |||
g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); | |||
g_d3ddevice->SetVertexDeclaration(m_vdecl); | |||
g_d3ddevice->SetStreamSource(0, m_vbo, 0, sizeof(*m_vertices)); | |||
g_d3ddevice->SetStreamSource(1, m_cbo, 0, sizeof(*m_colors)); | |||
g_d3ddevice->SetIndices(m_ibo); | |||
@@ -242,12 +237,11 @@ private: | |||
vec3 m_colors[8]; | |||
i16vec3 m_indices[12]; | |||
Shader *m_shader; | |||
VertexDeclaration *m_vdecl; | |||
#if defined USE_D3D9 | |||
IDirect3DVertexDeclaration9 *m_vdecl; | |||
IDirect3DVertexBuffer9 *m_vbo, *m_cbo; | |||
IDirect3DIndexBuffer9 *m_ibo; | |||
#elif defined _XBOX | |||
D3DVertexDeclaration *m_vdecl; | |||
D3DVertexBuffer *m_vbo, *m_cbo; | |||
D3DIndexBuffer *m_ibo; | |||
#else | |||
@@ -675,6 +675,9 @@ public: | |||
m_zoomuni = m_shader->GetUniformLocation("u_ZoomSettings"); | |||
m_ready = true; | |||
m_vdecl = | |||
new VertexDeclaration(VertexStream<vec2>(VertexUsage::Position), | |||
VertexStream<vec2>(VertexUsage::TexCoord)); | |||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined _XBOX && !defined USE_D3D9 | |||
/* Method 1: store vertex buffer on the GPU memory */ | |||
glGenBuffers(1, &m_vbo); | |||
@@ -688,14 +691,6 @@ public: | |||
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined _XBOX && !defined USE_D3D9 | |||
/* Method 2: upload vertex information at each frame */ | |||
#elif defined _XBOX || defined USE_D3D9 | |||
D3DVERTEXELEMENT9 const elements[] = | |||
{ | |||
{ 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, | |||
{ 1, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, | |||
D3DDECL_END() | |||
}; | |||
g_d3ddevice->CreateVertexDeclaration(elements, &m_vdecl); | |||
if (FAILED(g_d3ddevice->CreateVertexBuffer(sizeof(vertices), D3DUSAGE_WRITEONLY, NULL, D3DPOOL_MANAGED, &m_vbo, NULL))) | |||
exit(0); | |||
vec2 *tmp1; | |||
@@ -766,11 +761,11 @@ public: | |||
m_shader->SetUniform(m_texeluni, m_texel_settings); | |||
m_shader->SetUniform(m_screenuni, m_screen_settings); | |||
m_shader->SetUniform(m_zoomuni, m_zoom_settings); | |||
m_vdecl->Bind(); | |||
#if defined _XBOX || defined USE_D3D9 | |||
g_d3ddevice->SetTexture(0, m_tex); | |||
//g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); | |||
g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); | |||
g_d3ddevice->SetVertexDeclaration(m_vdecl); | |||
g_d3ddevice->SetStreamSource(0, m_vbo, 0, sizeof(*vertices)); | |||
g_d3ddevice->SetStreamSource(1, m_tbo, 0, sizeof(*texcoords)); | |||
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ | |||
@@ -826,13 +821,12 @@ private: | |||
f64vec2 m_texel2world; | |||
u8vec4 *m_pixels, *m_tmppixels, *m_palette; | |||
Shader *m_shader; | |||
VertexDeclaration *m_vdecl; | |||
#if defined USE_D3D9 | |||
IDirect3DTexture9 *m_tex; | |||
IDirect3DVertexDeclaration9 *m_vdecl; | |||
IDirect3DVertexBuffer9 *m_vbo, *m_tbo; | |||
#elif defined _XBOX | |||
D3DTexture *m_tex; | |||
D3DVertexDeclaration *m_vdecl; | |||
D3DVertexBuffer *m_vbo, *m_tbo; | |||
#else | |||
GLuint m_texid; | |||