mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
Fix bugs with Cg shaders
This commit is contained in:
parent
dba717fe83
commit
a76a011105
@ -449,8 +449,8 @@ update_shader_vertex_arrays(ShaderContext *prev, bool force) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_glgsg->_data_reader->get_array_info(name,
|
if (_glgsg->_data_reader->get_array_info(name,
|
||||||
array_reader, num_values, numeric_type,
|
array_reader, num_values, numeric_type,
|
||||||
start, stride)) {
|
start, stride)) {
|
||||||
const unsigned char *client_pointer;
|
const unsigned char *client_pointer;
|
||||||
if (!_glgsg->setup_array_data(client_pointer, array_reader, force)) {
|
if (!_glgsg->setup_array_data(client_pointer, array_reader, force)) {
|
||||||
return false;
|
return false;
|
||||||
@ -458,15 +458,21 @@ update_shader_vertex_arrays(ShaderContext *prev, bool force) {
|
|||||||
|
|
||||||
CGparameter p = _cg_parameter_map[_shader->_var_spec[i]._id._seqno];
|
CGparameter p = _cg_parameter_map[_shader->_var_spec[i]._id._seqno];
|
||||||
|
|
||||||
cgGLEnableClientState(p);
|
|
||||||
if (numeric_type == GeomEnums::NT_packed_dabc) {
|
if (numeric_type == GeomEnums::NT_packed_dabc) {
|
||||||
cgGLSetParameterPointer(p, GL_BGRA, GL_UNSIGNED_BYTE,
|
cgGLSetParameterPointer(p, GL_BGRA, GL_UNSIGNED_BYTE,
|
||||||
stride, client_pointer + start);
|
stride, client_pointer + start);
|
||||||
} else {
|
} else {
|
||||||
|
if (name == InternalName::get_normal() && num_values == 4) {
|
||||||
|
// In some cases, the normals are aligned to 4 values.
|
||||||
|
// This would cause an error on some rivers, so we tell it
|
||||||
|
// to use the first three values only.
|
||||||
|
num_values = 3;
|
||||||
|
}
|
||||||
cgGLSetParameterPointer(p,
|
cgGLSetParameterPointer(p,
|
||||||
num_values, _glgsg->get_numeric_type(numeric_type),
|
num_values, _glgsg->get_numeric_type(numeric_type),
|
||||||
stride, client_pointer + start);
|
stride, client_pointer + start);
|
||||||
}
|
}
|
||||||
|
cgGLEnableClientState(p);
|
||||||
} else {
|
} else {
|
||||||
CGparameter p = _cg_parameter_map[_shader->_var_spec[i]._id._seqno];
|
CGparameter p = _cg_parameter_map[_shader->_var_spec[i]._id._seqno];
|
||||||
cgGLDisableClientState(p);
|
cgGLDisableClientState(p);
|
||||||
@ -599,6 +605,8 @@ update_shader_texture_bindings(ShaderContext *prev) {
|
|||||||
if (!_glgsg->update_texture(tc, false)) {
|
if (!_glgsg->update_texture(tc, false)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_glgsg->apply_texture(tc);
|
||||||
}
|
}
|
||||||
|
|
||||||
cg_report_errors();
|
cg_report_errors();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user