issues that were introduced with the Direct3D changes.legacy
@@ -73,7 +73,7 @@ private: | |||||
GLuint buffer[NUM_BUFFERS]; | GLuint buffer[NUM_BUFFERS]; | ||||
Shader *shader[NUM_SHADERS]; | Shader *shader[NUM_SHADERS]; | ||||
GLuint attr[NUM_ATTRS]; | GLuint attr[NUM_ATTRS]; | ||||
GLuint uni[NUM_UNIFORMS]; | |||||
ShaderUniform uni[NUM_UNIFORMS]; | |||||
GLuint texture[NUM_TEXTURES]; | GLuint texture[NUM_TEXTURES]; | ||||
uint8_t image[1][TEX_SIZE * TEX_SIZE * 4]; | uint8_t image[1][TEX_SIZE * TEX_SIZE * 4]; | ||||
@@ -246,7 +246,7 @@ void DebugQuad::TickDraw(float deltams) | |||||
GLuint *buffer = data->buffer; | GLuint *buffer = data->buffer; | ||||
Shader **shader = data->shader; | Shader **shader = data->shader; | ||||
GLuint *attr = data->attr; | GLuint *attr = data->attr; | ||||
GLuint *uni = data->uni; | |||||
ShaderUniform *uni = data->uni; | |||||
/* These may be shared across calls */ | /* These may be shared across calls */ | ||||
GLfloat const *sine; | GLfloat const *sine; | ||||
@@ -284,6 +284,51 @@ ShaderUniform Shader::GetUniformLocation(char const *uni) const | |||||
return ret; | return ret; | ||||
} | } | ||||
void Shader::SetUniform(ShaderUniform const &uni, int i) | |||||
{ | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
SetUniform(uni, ivec4(i, 0, 0, 0)); | |||||
#elif !defined __CELLOS_LV2__ | |||||
glUniform1i(uni.frag, i); | |||||
#else | |||||
/* FIXME: does this exist at all? */ | |||||
//cgGLSetParameter1i((CGparameter)uni.frag, i); | |||||
#endif | |||||
} | |||||
void Shader::SetUniform(ShaderUniform const &uni, ivec2 const &v) | |||||
{ | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
SetUniform(uni, ivec4(v, 0, 0)); | |||||
#elif !defined __CELLOS_LV2__ | |||||
glUniform2i(uni.frag, v.x, v.y); | |||||
#else | |||||
/* FIXME: does this exist at all? */ | |||||
#endif | |||||
} | |||||
void Shader::SetUniform(ShaderUniform const &uni, ivec3 const &v) | |||||
{ | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
SetUniform(uni, ivec4(v, 0)); | |||||
#elif !defined __CELLOS_LV2__ | |||||
glUniform3i(uni.frag, v.x, v.y, v.z); | |||||
#else | |||||
/* FIXME: does this exist at all? */ | |||||
#endif | |||||
} | |||||
void Shader::SetUniform(ShaderUniform const &uni, ivec4 const &v) | |||||
{ | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
SetUniform(uni, v); | |||||
#elif !defined __CELLOS_LV2__ | |||||
glUniform4i(uni.frag, v.x, v.y, v.z, v.w); | |||||
#else | |||||
/* FIXME: does this exist at all? */ | |||||
#endif | |||||
} | |||||
void Shader::SetUniform(ShaderUniform const &uni, float f) | void Shader::SetUniform(ShaderUniform const &uni, float f) | ||||
{ | { | ||||
#if defined USE_D3D9 || defined _XBOX | #if defined USE_D3D9 || defined _XBOX | ||||
@@ -335,9 +380,12 @@ void Shader::SetUniform(ShaderUniform const &uni, vec4 const &v) | |||||
if (uni.flags & 2) | if (uni.flags & 2) | ||||
g_d3ddevice->SetVertexShaderConstantF((UINT)uni.vert, &v[0], 1); | g_d3ddevice->SetVertexShaderConstantF((UINT)uni.vert, &v[0], 1); | ||||
#elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
glUniform4f(uni, v.x, v.y, v.z, v.w); | |||||
glUniform4f(uni.frag, v.x, v.y, v.z, v.w); | |||||
#else | #else | ||||
cgGLSetParameter4f((CGparameter)uni, v.x, v.y, v.z, v.w); | |||||
if (uni.frag) | |||||
cgGLSetParameter4f((CGparameter)uni.frag, v.x, v.y, v.z, v.w); | |||||
if (uni.vert) | |||||
cgGLSetParameter4f((CGparameter)uni.vert, v.x, v.y, v.z, v.w); | |||||
#endif | #endif | ||||
} | } | ||||
@@ -349,9 +397,12 @@ void Shader::SetUniform(ShaderUniform const &uni, mat4 const &m) | |||||
if (uni.flags & 2) | if (uni.flags & 2) | ||||
g_d3ddevice->SetVertexShaderConstantF((UINT)uni.vert, &m[0][0], 4); | g_d3ddevice->SetVertexShaderConstantF((UINT)uni.vert, &m[0][0], 4); | ||||
#elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
glUniformMatrix4fv(uni, 1, GL_FALSE, &m[0][0]); | |||||
glUniformMatrix4fv(uni.frag, 1, GL_FALSE, &m[0][0]); | |||||
#else | #else | ||||
cgGLSetMatrixParameterfc((CGparameter)uni, &m[0][0]); | |||||
if (uni.frag) | |||||
cgGLSetMatrixParameterfc((CGparameter)uni.frag, &m[0][0]); | |||||
if (uni.vert) | |||||
cgGLSetMatrixParameterfc((CGparameter)uni.vert, &m[0][0]); | |||||
#endif | #endif | ||||
} | } | ||||
@@ -45,6 +45,10 @@ public: | |||||
int GetAttribLocation(char const *attr) const; | int GetAttribLocation(char const *attr) const; | ||||
ShaderUniform GetUniformLocation(char const *uni) const; | ShaderUniform GetUniformLocation(char const *uni) const; | ||||
void SetUniform(ShaderUniform const &uni, int i); | |||||
void SetUniform(ShaderUniform const &uni, ivec2 const &v); | |||||
void SetUniform(ShaderUniform const &uni, ivec3 const &v); | |||||
void SetUniform(ShaderUniform const &uni, ivec4 const &v); | |||||
void SetUniform(ShaderUniform const &uni, float f); | void SetUniform(ShaderUniform const &uni, float f); | ||||
void SetUniform(ShaderUniform const &uni, vec2 const &v); | void SetUniform(ShaderUniform const &uni, vec2 const &v); | ||||
void SetUniform(ShaderUniform const &uni, vec3 const &v); | void SetUniform(ShaderUniform const &uni, vec3 const &v); | ||||
@@ -166,7 +166,8 @@ void Gradient::TickDraw(float deltams) | |||||
mat4 model_matrix = mat4(1.0f); | mat4 model_matrix = mat4(1.0f); | ||||
GLuint uni_mat, attr_pos, attr_col; | |||||
ShaderUniform uni_mat; | |||||
GLuint attr_pos, attr_col; | |||||
#if !defined __CELLOS_LV2__ | #if !defined __CELLOS_LV2__ | ||||
attr_pos = data->shader->GetAttribLocation("in_Vertex"); | attr_pos = data->shader->GetAttribLocation("in_Vertex"); | ||||
attr_col = data->shader->GetAttribLocation("in_Color"); | attr_col = data->shader->GetAttribLocation("in_Color"); | ||||
@@ -324,7 +324,8 @@ void Scene::Render() // XXX: rename to Blit() | |||||
data->model_matrix *= mat4::translate(-320.0f, -240.0f, 0.0f); | data->model_matrix *= mat4::translate(-320.0f, -240.0f, 0.0f); | ||||
// XXX: end of debug stuff | // XXX: end of debug stuff | ||||
int uni_mat, uni_tex, attr_pos, attr_tex; | |||||
ShaderUniform uni_mat, uni_tex; | |||||
int attr_pos, attr_tex; | |||||
#if !defined __CELLOS_LV2__ | #if !defined __CELLOS_LV2__ | ||||
attr_pos = stdshader->GetAttribLocation("in_Position"); | attr_pos = stdshader->GetAttribLocation("in_Position"); | ||||
attr_tex = stdshader->GetAttribLocation("in_TexCoord"); | attr_tex = stdshader->GetAttribLocation("in_TexCoord"); | ||||
@@ -339,16 +340,8 @@ void Scene::Render() // XXX: rename to Blit() | |||||
uni_mat = stdshader->GetUniformLocation("model_matrix"); | uni_mat = stdshader->GetUniformLocation("model_matrix"); | ||||
stdshader->SetUniform(uni_mat, data->model_matrix); | stdshader->SetUniform(uni_mat, data->model_matrix); | ||||
#if defined USE_D3D9 || defined _XBOX | |||||
/* TODO */ | |||||
#elif !defined __CELLOS_LV2__ | |||||
uni_tex = stdshader->GetUniformLocation("in_Texture"); | uni_tex = stdshader->GetUniformLocation("in_Texture"); | ||||
glUniform1i(uni_tex, 0); | |||||
#else | |||||
// WTF? this doesn't exist | |||||
//uni_tex = stdshader->GetUniformLocation("in_Texture"); | |||||
//cgGLSetParameter1i((CGparameter)(intptr_t)uni_tex, 0); | |||||
#endif | |||||
stdshader->SetUniform(uni_tex, 0); | |||||
#if defined USE_D3D9 || defined _XBOX | #if defined USE_D3D9 || defined _XBOX | ||||
/* TODO */ | /* TODO */ | ||||
@@ -453,7 +453,7 @@ public: | |||||
if (!m_ready) | if (!m_ready) | ||||
{ | { | ||||
#if !defined __CELLOS_LV2__ && !defined _XBOX && !defined USE_D3D9 | |||||
#if !defined _XBOX && !defined USE_D3D9 | |||||
/* Create a texture of half the width and twice the height | /* Create a texture of half the width and twice the height | ||||
* so that we can upload four different subimages each frame. */ | * so that we can upload four different subimages each frame. */ | ||||
glGenTextures(1, &m_texid); | glGenTextures(1, &m_texid); | ||||