|
|
@@ -2110,8 +2110,8 @@ issue_parameters(int altered) {
|
|
|
for (int i = 0; i < (int)_shader->_ptr_spec.size(); ++i) {
|
|
|
Shader::ShaderPtrSpec &spec = _shader->_ptr_spec[i];
|
|
|
|
|
|
- const Shader::ShaderPtrData* ptr_data = _glgsg->fetch_ptr_parameter(spec);
|
|
|
- if (ptr_data == nullptr) { //the input is not contained in ShaderPtrData
|
|
|
+ Shader::ShaderPtrData ptr_data;
|
|
|
+ if (!_glgsg->fetch_ptr_parameter(spec, ptr_data)) { //the input is not contained in ShaderPtrData
|
|
|
release_resources();
|
|
|
return;
|
|
|
}
|
|
|
@@ -2119,18 +2119,18 @@ issue_parameters(int altered) {
|
|
|
nassertd(spec._dim[1] > 0) continue;
|
|
|
|
|
|
GLint p = spec._id._seqno;
|
|
|
- int array_size = min(spec._dim[0], (int)ptr_data->_size / spec._dim[1]);
|
|
|
+ int array_size = min(spec._dim[0], (int)ptr_data._size / spec._dim[1]);
|
|
|
switch (spec._type) {
|
|
|
case Shader::SPT_float:
|
|
|
{
|
|
|
float *data = nullptr;
|
|
|
|
|
|
- switch (ptr_data->_type) {
|
|
|
+ switch (ptr_data._type) {
|
|
|
case Shader::SPT_int:
|
|
|
// Convert int data to float data.
|
|
|
data = (float*) alloca(sizeof(float) * array_size * spec._dim[1]);
|
|
|
for (int i = 0; i < (array_size * spec._dim[1]); ++i) {
|
|
|
- data[i] = (float)(((int*)ptr_data->_ptr)[i]);
|
|
|
+ data[i] = (float)(((int*)ptr_data._ptr)[i]);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -2138,7 +2138,7 @@ issue_parameters(int altered) {
|
|
|
// Convert unsigned int data to float data.
|
|
|
data = (float*) alloca(sizeof(float) * array_size * spec._dim[1]);
|
|
|
for (int i = 0; i < (array_size * spec._dim[1]); ++i) {
|
|
|
- data[i] = (float)(((unsigned int*)ptr_data->_ptr)[i]);
|
|
|
+ data[i] = (float)(((unsigned int*)ptr_data._ptr)[i]);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -2146,12 +2146,12 @@ issue_parameters(int altered) {
|
|
|
// Downgrade double data to float data.
|
|
|
data = (float*) alloca(sizeof(float) * array_size * spec._dim[1]);
|
|
|
for (int i = 0; i < (array_size * spec._dim[1]); ++i) {
|
|
|
- data[i] = (float)(((double*)ptr_data->_ptr)[i]);
|
|
|
+ data[i] = (float)(((double*)ptr_data._ptr)[i]);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case Shader::SPT_float:
|
|
|
- data = (float*)ptr_data->_ptr;
|
|
|
+ data = (float*)ptr_data._ptr;
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
@@ -2171,8 +2171,8 @@ issue_parameters(int altered) {
|
|
|
break;
|
|
|
|
|
|
case Shader::SPT_int:
|
|
|
- if (ptr_data->_type != Shader::SPT_int &&
|
|
|
- ptr_data->_type != Shader::SPT_uint) {
|
|
|
+ if (ptr_data._type != Shader::SPT_int &&
|
|
|
+ ptr_data._type != Shader::SPT_uint) {
|
|
|
GLCAT.error()
|
|
|
<< "Cannot pass floating-point data to integer shader input '" << spec._id._name << "'\n";
|
|
|
|
|
|
@@ -2183,18 +2183,18 @@ issue_parameters(int altered) {
|
|
|
|
|
|
} else {
|
|
|
switch (spec._dim[1]) {
|
|
|
- case 1: _glgsg->_glUniform1iv(p, array_size, (int*)ptr_data->_ptr); continue;
|
|
|
- case 2: _glgsg->_glUniform2iv(p, array_size, (int*)ptr_data->_ptr); continue;
|
|
|
- case 3: _glgsg->_glUniform3iv(p, array_size, (int*)ptr_data->_ptr); continue;
|
|
|
- case 4: _glgsg->_glUniform4iv(p, array_size, (int*)ptr_data->_ptr); continue;
|
|
|
+ case 1: _glgsg->_glUniform1iv(p, array_size, (int*)ptr_data._ptr); continue;
|
|
|
+ case 2: _glgsg->_glUniform2iv(p, array_size, (int*)ptr_data._ptr); continue;
|
|
|
+ case 3: _glgsg->_glUniform3iv(p, array_size, (int*)ptr_data._ptr); continue;
|
|
|
+ case 4: _glgsg->_glUniform4iv(p, array_size, (int*)ptr_data._ptr); continue;
|
|
|
}
|
|
|
nassertd(false) continue;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case Shader::SPT_uint:
|
|
|
- if (ptr_data->_type != Shader::SPT_uint &&
|
|
|
- ptr_data->_type != Shader::SPT_int) {
|
|
|
+ if (ptr_data._type != Shader::SPT_uint &&
|
|
|
+ ptr_data._type != Shader::SPT_int) {
|
|
|
GLCAT.error()
|
|
|
<< "Cannot pass floating-point data to integer shader input '" << spec._id._name << "'\n";
|
|
|
|
|
|
@@ -2205,10 +2205,10 @@ issue_parameters(int altered) {
|
|
|
|
|
|
} else {
|
|
|
switch (spec._dim[1]) {
|
|
|
- case 1: _glgsg->_glUniform1uiv(p, array_size, (GLuint *)ptr_data->_ptr); continue;
|
|
|
- case 2: _glgsg->_glUniform2uiv(p, array_size, (GLuint *)ptr_data->_ptr); continue;
|
|
|
- case 3: _glgsg->_glUniform3uiv(p, array_size, (GLuint *)ptr_data->_ptr); continue;
|
|
|
- case 4: _glgsg->_glUniform4uiv(p, array_size, (GLuint *)ptr_data->_ptr); continue;
|
|
|
+ case 1: _glgsg->_glUniform1uiv(p, array_size, (GLuint *)ptr_data._ptr); continue;
|
|
|
+ case 2: _glgsg->_glUniform2uiv(p, array_size, (GLuint *)ptr_data._ptr); continue;
|
|
|
+ case 3: _glgsg->_glUniform3uiv(p, array_size, (GLuint *)ptr_data._ptr); continue;
|
|
|
+ case 4: _glgsg->_glUniform4uiv(p, array_size, (GLuint *)ptr_data._ptr); continue;
|
|
|
}
|
|
|
nassertd(false) continue;
|
|
|
}
|