mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 16:58:40 -04:00
run on stdfloat_double
This commit is contained in:
parent
05c6cc00a4
commit
0fcd46e5bb
@ -22,7 +22,7 @@
|
||||
INLINE DWORD DXGraphicsStateGuardian8::
|
||||
LColor_to_D3DCOLOR(const LColor &cLColor) {
|
||||
// MS VC defines _M_IX86 for x86. gcc should define _X86_
|
||||
#if defined(_M_IX86) || defined(_X86_)
|
||||
#if (defined(_M_IX86) || defined(_X86_)) && !defined(STDFLOAT_DOUBLE)
|
||||
DWORD d3dcolor, tempcolorval=255;
|
||||
|
||||
// note the default FPU rounding mode will give 255*0.5f=0x80, not 0x7F as VC would force it to by resetting rounding mode
|
||||
|
@ -724,9 +724,10 @@ calc_projection_mat(const Lens *lens) {
|
||||
bool DXGraphicsStateGuardian8::
|
||||
prepare_lens() {
|
||||
CPT(TransformState) scissor_proj_mat = _scissor_mat->compose(_projection_mat);
|
||||
LMatrix4f mat = LCAST(float, scissor_proj_mat->get_mat());
|
||||
HRESULT hr =
|
||||
_d3d_device->SetTransform(D3DTS_PROJECTION,
|
||||
(D3DMATRIX*)scissor_proj_mat->get_mat().get_data());
|
||||
(D3DMATRIX*)mat.get_data());
|
||||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
@ -931,7 +932,8 @@ begin_draw_primitives(const GeomPipelineReader *geom_reader,
|
||||
for (int i = 0; i < table->get_num_transforms(); i++) {
|
||||
LMatrix4 mat;
|
||||
table->get_transform(i)->mult_matrix(mat, _internal_transform->get_mat());
|
||||
const D3DMATRIX *d3d_mat = (const D3DMATRIX *)mat.get_data();
|
||||
LMatrix4f matf = LCAST(float, mat);
|
||||
const D3DMATRIX *d3d_mat = (const D3DMATRIX *)matf.get_data();
|
||||
_d3d_device->SetTransform(D3DTS_WORLDMATRIX(i), d3d_mat);
|
||||
}
|
||||
|
||||
@ -950,7 +952,8 @@ begin_draw_primitives(const GeomPipelineReader *geom_reader,
|
||||
}
|
||||
|
||||
if (_transform_stale && !_data_reader->is_vertex_transformed()) {
|
||||
const D3DMATRIX *d3d_mat = (const D3DMATRIX *)_internal_transform->get_mat().get_data();
|
||||
LMatrix4f mat = LCAST(float, _internal_transform->get_mat());
|
||||
const D3DMATRIX *d3d_mat = (const D3DMATRIX *)mat.get_data();
|
||||
_d3d_device->SetTransform(D3DTS_WORLD, d3d_mat);
|
||||
_transform_stale = false;
|
||||
}
|
||||
@ -966,7 +969,7 @@ begin_draw_primitives(const GeomPipelineReader *geom_reader,
|
||||
// we want: that also prevents lighting calculations and user clip
|
||||
// planes.
|
||||
_d3d_device->SetTransform(D3DTS_WORLD, &_d3d_ident_mat);
|
||||
static const LMatrix4 rescale_mat
|
||||
static const LMatrix4f rescale_mat
|
||||
(1, 0, 0, 0,
|
||||
0, 1, 0, 0,
|
||||
0, 0, 0.5, 0,
|
||||
@ -1471,8 +1474,9 @@ end_draw_primitives() {
|
||||
|
||||
if (_data_reader->is_vertex_transformed()) {
|
||||
// Restore the projection matrix that we wiped out above.
|
||||
LMatrix4f mat = LCAST(float, _projection_mat->get_mat());
|
||||
_d3d_device->SetTransform(D3DTS_PROJECTION,
|
||||
(D3DMATRIX*)_projection_mat->get_mat().get_data());
|
||||
(D3DMATRIX*)mat.get_data());
|
||||
}
|
||||
|
||||
GraphicsStateGuardian::end_draw_primitives();
|
||||
@ -2135,7 +2139,8 @@ do_issue_transform() {
|
||||
const TransformState *transform = _internal_transform;
|
||||
DO_PSTATS_STUFF(_transform_state_pcollector.add_level(1));
|
||||
|
||||
const D3DMATRIX *d3d_mat = (const D3DMATRIX *)transform->get_mat().get_data();
|
||||
LMatrix4f mat = LCAST(float, transform->get_mat());
|
||||
const D3DMATRIX *d3d_mat = (const D3DMATRIX *)mat.get_data();
|
||||
_d3d_device->SetTransform(D3DTS_WORLD, d3d_mat);
|
||||
_transform_stale = false;
|
||||
|
||||
@ -2588,7 +2593,7 @@ bind_light(PointLight *light_obj, const NodePath &light, int light_id) {
|
||||
CPT(TransformState) transform = light.get_transform(_scene_setup->get_camera_path());
|
||||
const LMatrix4 &light_mat = transform->get_mat();
|
||||
LMatrix4 rel_mat = light_mat * LMatrix4::convert_mat(CS_yup_left, CS_default);
|
||||
LPoint3 pos = light_obj->get_point() * rel_mat;
|
||||
LPoint3f pos = LCAST(float, light_obj->get_point() * rel_mat);
|
||||
|
||||
D3DCOLORVALUE black;
|
||||
black.r = black.g = black.b = black.a = 0.0f;
|
||||
@ -2596,7 +2601,8 @@ bind_light(PointLight *light_obj, const NodePath &light, int light_id) {
|
||||
alight.Type = D3DLIGHT_POINT;
|
||||
alight.Diffuse = get_light_color(light_obj);
|
||||
alight.Ambient = black ;
|
||||
alight.Specular = *(D3DCOLORVALUE *)(light_obj->get_specular_color().get_data());
|
||||
LColorf color = LCAST(float, light_obj->get_specular_color());
|
||||
alight.Specular = *(D3DCOLORVALUE *)(color.get_data());
|
||||
|
||||
// Position needs to specify x, y, z, and w
|
||||
// w == 1 implies non-infinite position
|
||||
@ -2640,7 +2646,7 @@ bind_light(DirectionalLight *light_obj, const NodePath &light, int light_id) {
|
||||
CPT(TransformState) transform = light.get_transform(_scene_setup->get_camera_path());
|
||||
const LMatrix4 &light_mat = transform->get_mat();
|
||||
LMatrix4 rel_mat = light_mat * LMatrix4::convert_mat(CS_yup_left, CS_default);
|
||||
LVector3 dir = light_obj->get_direction() * rel_mat;
|
||||
LVector3f dir = LCAST(float, light_obj->get_direction() * rel_mat);
|
||||
|
||||
D3DCOLORVALUE black;
|
||||
black.r = black.g = black.b = black.a = 0.0f;
|
||||
@ -2649,7 +2655,8 @@ bind_light(DirectionalLight *light_obj, const NodePath &light, int light_id) {
|
||||
|
||||
fdata.Type = D3DLIGHT_DIRECTIONAL;
|
||||
fdata.Ambient = black ;
|
||||
fdata.Specular = *(D3DCOLORVALUE *)(light_obj->get_specular_color().get_data());
|
||||
LColorf color = LCAST(float, light_obj->get_specular_color());
|
||||
fdata.Specular = *(D3DCOLORVALUE *)(color.get_data());
|
||||
|
||||
fdata.Direction = *(D3DVECTOR *)dir.get_data();
|
||||
|
||||
@ -2693,8 +2700,8 @@ bind_light(Spotlight *light_obj, const NodePath &light, int light_id) {
|
||||
CPT(TransformState) transform = light.get_transform(_scene_setup->get_camera_path());
|
||||
const LMatrix4 &light_mat = transform->get_mat();
|
||||
LMatrix4 rel_mat = light_mat * LMatrix4::convert_mat(CS_yup_left, CS_default);
|
||||
LPoint3 pos = lens->get_nodal_point() * rel_mat;
|
||||
LVector3 dir = lens->get_view_vector() * rel_mat;
|
||||
LPoint3f pos = LCAST(float, lens->get_nodal_point() * rel_mat);
|
||||
LVector3f dir = LCAST(float, lens->get_view_vector() * rel_mat);
|
||||
|
||||
D3DCOLORVALUE black;
|
||||
black.r = black.g = black.b = black.a = 0.0f;
|
||||
@ -2705,7 +2712,8 @@ bind_light(Spotlight *light_obj, const NodePath &light, int light_id) {
|
||||
alight.Type = D3DLIGHT_SPOT;
|
||||
alight.Ambient = black ;
|
||||
alight.Diffuse = get_light_color(light_obj);
|
||||
alight.Specular = *(D3DCOLORVALUE *)(light_obj->get_specular_color().get_data());
|
||||
LColorf color = LCAST(float, light_obj->get_specular_color());
|
||||
alight.Specular = *(D3DCOLORVALUE *)(color.get_data());
|
||||
|
||||
alight.Position = *(D3DVECTOR *)pos.get_data();
|
||||
|
||||
@ -2773,10 +2781,14 @@ do_issue_material() {
|
||||
}
|
||||
|
||||
D3DMATERIAL8 cur_material;
|
||||
cur_material.Diffuse = *(D3DCOLORVALUE *)(material->get_diffuse().get_data());
|
||||
cur_material.Ambient = *(D3DCOLORVALUE *)(material->get_ambient().get_data());
|
||||
cur_material.Specular = *(D3DCOLORVALUE *)(material->get_specular().get_data());
|
||||
cur_material.Emissive = *(D3DCOLORVALUE *)(material->get_emission().get_data());
|
||||
LColorf color = LCAST(float, material->get_diffuse());
|
||||
cur_material.Diffuse = *(D3DCOLORVALUE *)(color.get_data());
|
||||
color = LCAST(float, material->get_ambient());
|
||||
cur_material.Ambient = *(D3DCOLORVALUE *)(color.get_data());
|
||||
color = LCAST(float, material->get_specular());
|
||||
cur_material.Specular = *(D3DCOLORVALUE *)(color.get_data());
|
||||
color = LCAST(float, material->get_emission());
|
||||
cur_material.Emissive = *(D3DCOLORVALUE *)(color.get_data());
|
||||
cur_material.Power = material->get_shininess();
|
||||
|
||||
if (material->has_diffuse()) {
|
||||
@ -2785,7 +2797,8 @@ do_issue_material() {
|
||||
} else {
|
||||
// Otherwise, the diffuse color comes from the object color.
|
||||
if (_has_material_force_color) {
|
||||
cur_material.Diffuse = *(D3DCOLORVALUE *)_material_force_color.get_data();
|
||||
color = LCAST(float, _material_force_color);
|
||||
cur_material.Diffuse = *(D3DCOLORVALUE *)color.get_data();
|
||||
_d3d_device->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL);
|
||||
} else {
|
||||
_d3d_device->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);
|
||||
@ -2797,7 +2810,8 @@ do_issue_material() {
|
||||
} else {
|
||||
// Otherwise, the ambient color comes from the object color.
|
||||
if (_has_material_force_color) {
|
||||
cur_material.Ambient = *(D3DCOLORVALUE *)_material_force_color.get_data();
|
||||
color = LCAST(float, _material_force_color);
|
||||
cur_material.Ambient = *(D3DCOLORVALUE *)color.get_data();
|
||||
_d3d_device->SetRenderState(D3DRS_AMBIENTMATERIALSOURCE, D3DMCS_MATERIAL);
|
||||
} else {
|
||||
_d3d_device->SetRenderState(D3DRS_AMBIENTMATERIALSOURCE, D3DMCS_COLOR1);
|
||||
@ -2985,16 +2999,17 @@ do_issue_texture() {
|
||||
if (/*tex_mat->is_2d() &&*/ texcoord_dimensions <= 2) {
|
||||
// For 2-d texture coordinates, we have to reorder the matrix.
|
||||
LMatrix4 m = tex_mat->get_mat();
|
||||
m.set(m(0, 0), m(0, 1), m(0, 3), 0.0f,
|
||||
m(1, 0), m(1, 1), m(1, 3), 0.0f,
|
||||
m(3, 0), m(3, 1), m(3, 3), 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f);
|
||||
_d3d_device->SetTransform(get_tex_mat_sym(si), (D3DMATRIX *)m.get_data());
|
||||
LMatrix4f mf;
|
||||
mf.set(m(0, 0), m(0, 1), m(0, 3), 0.0f,
|
||||
m(1, 0), m(1, 1), m(1, 3), 0.0f,
|
||||
m(3, 0), m(3, 1), m(3, 3), 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f);
|
||||
_d3d_device->SetTransform(get_tex_mat_sym(si), (D3DMATRIX *)mf.get_data());
|
||||
_d3d_device->SetTextureStageState(si, D3DTSS_TEXTURETRANSFORMFLAGS,
|
||||
D3DTTFF_COUNT2);
|
||||
} else {
|
||||
LMatrix4 m = tex_mat->get_mat();
|
||||
_d3d_device->SetTransform(get_tex_mat_sym(si), (D3DMATRIX *)m.get_data());
|
||||
LMatrix4f m = LCAST(float, tex_mat->get_mat());
|
||||
_d3d_device->SetTransform(get_tex_mat_sym(si), (D3DMATRIX *)mf.get_data());
|
||||
DWORD transform_flags = texcoord_dimensions;
|
||||
if (m.get_col(3) != LVecBase4(0.0f, 0.0f, 0.0f, 1.0f)) {
|
||||
// If we have a projected texture matrix, we also need to
|
||||
@ -3358,13 +3373,13 @@ do_auto_rescale_normal() {
|
||||
////////////////////////////////////////////////////////////////////
|
||||
const D3DCOLORVALUE &DXGraphicsStateGuardian8::
|
||||
get_light_color(Light *light) const {
|
||||
static LColor c;
|
||||
c = light->get_color();
|
||||
c.set(c[0] * _light_color_scale[0],
|
||||
c[1] * _light_color_scale[1],
|
||||
c[2] * _light_color_scale[2],
|
||||
c[3] * _light_color_scale[3]);
|
||||
return *(D3DCOLORVALUE *)c.get_data();
|
||||
LColor c = light->get_color();
|
||||
static LColorf cf;
|
||||
cf.set(c[0] * _light_color_scale[0],
|
||||
c[1] * _light_color_scale[1],
|
||||
c[2] * _light_color_scale[2],
|
||||
c[3] * _light_color_scale[3]);
|
||||
return *(D3DCOLORVALUE *)cf.get_data();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
@ -22,7 +22,7 @@
|
||||
INLINE DWORD DXGraphicsStateGuardian9::
|
||||
LColor_to_D3DCOLOR(const LColor &cLColor) {
|
||||
// MS VC defines _M_IX86 for x86. gcc should define _X86_
|
||||
#if defined(_M_IX86) || defined(_X86_)
|
||||
#if (defined(_M_IX86) || defined(_X86_)) && !defined(STDFLOAT_DOUBLE)
|
||||
DWORD d3dcolor, tempcolorval=255;
|
||||
|
||||
// note the default FPU rounding mode will give 255*0.5f=0x80, not 0x7F as VC would force it to by resetting rounding mode
|
||||
|
@ -988,9 +988,10 @@ calc_projection_mat(const Lens *lens) {
|
||||
////////////////////////////////////////////////////////////////////
|
||||
bool DXGraphicsStateGuardian9::
|
||||
prepare_lens() {
|
||||
LMatrix4f mat = LCAST(float, _projection_mat->get_mat());
|
||||
HRESULT hr =
|
||||
_d3d_device->SetTransform(D3DTS_PROJECTION,
|
||||
(D3DMATRIX*)_projection_mat->get_mat().get_data());
|
||||
(D3DMATRIX*)mat.get_data());
|
||||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
@ -1280,7 +1281,7 @@ begin_draw_primitives(const GeomPipelineReader *geom_reader,
|
||||
// we want: that also prevents lighting calculations and user clip
|
||||
// planes.
|
||||
_d3d_device->SetTransform(D3DTS_WORLD, &_d3d_ident_mat);
|
||||
static const LMatrix4 rescale_mat
|
||||
static const LMatrix4f rescale_mat
|
||||
(1, 0, 0, 0,
|
||||
0, 1, 0, 0,
|
||||
0, 0, 0.5, 0,
|
||||
@ -1867,8 +1868,9 @@ end_draw_primitives() {
|
||||
|
||||
if (_data_reader->is_vertex_transformed()) {
|
||||
// Restore the projection matrix that we wiped out above.
|
||||
LMatrix4f mat = LCAST(float, _projection_mat->get_mat());
|
||||
_d3d_device->SetTransform(D3DTS_PROJECTION,
|
||||
(D3DMATRIX*)_projection_mat->get_mat().get_data());
|
||||
(D3DMATRIX*)mat.get_data());
|
||||
}
|
||||
|
||||
GraphicsStateGuardian::end_draw_primitives();
|
||||
@ -2816,12 +2818,14 @@ do_issue_transform() {
|
||||
_current_shader_context->issue_parameters(this, Shader::SSD_transform);
|
||||
|
||||
// ??? NO NEED TO SET THE D3D TRANSFORM VIA SetTransform SINCE THE TRANSFORM IS ONLY USED IN THE SHADER
|
||||
const D3DMATRIX *d3d_mat = (const D3DMATRIX *)transform->get_mat().get_data();
|
||||
LMatrix4f mat = LCAST(float, transform->get_mat());
|
||||
const D3DMATRIX *d3d_mat = (const D3DMATRIX *)mat.get_data();
|
||||
_d3d_device->SetTransform(D3DTS_WORLD, d3d_mat);
|
||||
|
||||
}
|
||||
else {
|
||||
const D3DMATRIX *d3d_mat = (const D3DMATRIX *)transform->get_mat().get_data();
|
||||
LMatrix4f mat = LCAST(float, transform->get_mat());
|
||||
const D3DMATRIX *d3d_mat = (const D3DMATRIX *)mat.get_data();
|
||||
_d3d_device->SetTransform(D3DTS_WORLD, d3d_mat);
|
||||
|
||||
// DEBUG PRINT
|
||||
@ -3384,7 +3388,7 @@ bind_light(PointLight *light_obj, const NodePath &light, int light_id) {
|
||||
CPT(TransformState) transform = light.get_transform(_scene_setup->get_camera_path());
|
||||
const LMatrix4 &light_mat = transform->get_mat();
|
||||
LMatrix4 rel_mat = light_mat * LMatrix4::convert_mat(CS_yup_left, CS_default);
|
||||
LPoint3 pos = light_obj->get_point() * rel_mat;
|
||||
LPoint3f pos = LCAST(float, light_obj->get_point() * rel_mat);
|
||||
|
||||
D3DCOLORVALUE black;
|
||||
black.r = black.g = black.b = black.a = 0.0f;
|
||||
@ -3392,7 +3396,8 @@ bind_light(PointLight *light_obj, const NodePath &light, int light_id) {
|
||||
alight.Type = D3DLIGHT_POINT;
|
||||
alight.Diffuse = get_light_color(light_obj);
|
||||
alight.Ambient = black ;
|
||||
alight.Specular = *(D3DCOLORVALUE *)(light_obj->get_specular_color().get_data());
|
||||
LColorf color = LCAST(float, light_obj->get_specular_color());
|
||||
alight.Specular = *(D3DCOLORVALUE *)(color.get_data());
|
||||
|
||||
// Position needs to specify x, y, z, and w
|
||||
// w == 1 implies non-infinite position
|
||||
@ -3436,7 +3441,7 @@ bind_light(DirectionalLight *light_obj, const NodePath &light, int light_id) {
|
||||
CPT(TransformState) transform = light.get_transform(_scene_setup->get_camera_path());
|
||||
const LMatrix4 &light_mat = transform->get_mat();
|
||||
LMatrix4 rel_mat = light_mat * LMatrix4::convert_mat(CS_yup_left, CS_default);
|
||||
LVector3 dir = light_obj->get_direction() * rel_mat;
|
||||
LVector3f dir = LCAST(float, light_obj->get_direction() * rel_mat);
|
||||
|
||||
D3DCOLORVALUE black;
|
||||
black.r = black.g = black.b = black.a = 0.0f;
|
||||
@ -3445,7 +3450,8 @@ bind_light(DirectionalLight *light_obj, const NodePath &light, int light_id) {
|
||||
|
||||
fdata.Type = D3DLIGHT_DIRECTIONAL;
|
||||
fdata.Ambient = black ;
|
||||
fdata.Specular = *(D3DCOLORVALUE *)(light_obj->get_specular_color().get_data());
|
||||
LColorf color = LCAST(float, light_obj->get_specular_color());
|
||||
fdata.Specular = *(D3DCOLORVALUE *)(color.get_data());
|
||||
|
||||
fdata.Direction = *(D3DVECTOR *)dir.get_data();
|
||||
|
||||
@ -3489,8 +3495,8 @@ bind_light(Spotlight *light_obj, const NodePath &light, int light_id) {
|
||||
CPT(TransformState) transform = light.get_transform(_scene_setup->get_camera_path());
|
||||
const LMatrix4 &light_mat = transform->get_mat();
|
||||
LMatrix4 rel_mat = light_mat * LMatrix4::convert_mat(CS_yup_left, CS_default);
|
||||
LPoint3 pos = lens->get_nodal_point() * rel_mat;
|
||||
LVector3 dir = lens->get_view_vector() * rel_mat;
|
||||
LPoint3f pos = LCAST(float, lens->get_nodal_point() * rel_mat);
|
||||
LVector3f dir = LCAST(float, lens->get_view_vector() * rel_mat);
|
||||
|
||||
D3DCOLORVALUE black;
|
||||
black.r = black.g = black.b = black.a = 0.0f;
|
||||
@ -3501,7 +3507,8 @@ bind_light(Spotlight *light_obj, const NodePath &light, int light_id) {
|
||||
alight.Type = D3DLIGHT_SPOT;
|
||||
alight.Ambient = black ;
|
||||
alight.Diffuse = get_light_color(light_obj);
|
||||
alight.Specular = *(D3DCOLORVALUE *)(light_obj->get_specular_color().get_data());
|
||||
LColorf color = LCAST(float, light_obj->get_specular_color());
|
||||
alight.Specular = *(D3DCOLORVALUE *)(color.get_data());
|
||||
|
||||
alight.Position = *(D3DVECTOR *)pos.get_data();
|
||||
|
||||
@ -3569,10 +3576,14 @@ do_issue_material() {
|
||||
}
|
||||
|
||||
D3DMATERIAL9 cur_material;
|
||||
cur_material.Diffuse = *(D3DCOLORVALUE *)(material->get_diffuse().get_data());
|
||||
cur_material.Ambient = *(D3DCOLORVALUE *)(material->get_ambient().get_data());
|
||||
cur_material.Specular = *(D3DCOLORVALUE *)(material->get_specular().get_data());
|
||||
cur_material.Emissive = *(D3DCOLORVALUE *)(material->get_emission().get_data());
|
||||
LColorf color = LCAST(float, material->get_diffuse());
|
||||
cur_material.Diffuse = *(D3DCOLORVALUE *)(color.get_data());
|
||||
color = LCAST(float, material->get_ambient());
|
||||
cur_material.Ambient = *(D3DCOLORVALUE *)(color.get_data());
|
||||
color = LCAST(float, material->get_specular());
|
||||
cur_material.Specular = *(D3DCOLORVALUE *)(color.get_data());
|
||||
color = LCAST(float, material->get_emission());
|
||||
cur_material.Emissive = *(D3DCOLORVALUE *)(color.get_data());
|
||||
cur_material.Power = material->get_shininess();
|
||||
|
||||
if (material->has_diffuse()) {
|
||||
@ -3581,7 +3592,8 @@ do_issue_material() {
|
||||
} else {
|
||||
// Otherwise, the diffuse color comes from the object color.
|
||||
if (_has_material_force_color) {
|
||||
cur_material.Diffuse = *(D3DCOLORVALUE *)_material_force_color.get_data();
|
||||
color = LCAST(float, _material_force_color);
|
||||
cur_material.Diffuse = *(D3DCOLORVALUE *)color.get_data();
|
||||
set_render_state(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL);
|
||||
} else {
|
||||
set_render_state(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);
|
||||
@ -3593,7 +3605,8 @@ do_issue_material() {
|
||||
} else {
|
||||
// Otherwise, the ambient color comes from the object color.
|
||||
if (_has_material_force_color) {
|
||||
cur_material.Ambient = *(D3DCOLORVALUE *)_material_force_color.get_data();
|
||||
color = LCAST(float, _material_force_color);
|
||||
cur_material.Ambient = *(D3DCOLORVALUE *)color.get_data();
|
||||
set_render_state(D3DRS_AMBIENTMATERIALSOURCE, D3DMCS_MATERIAL);
|
||||
} else {
|
||||
set_render_state(D3DRS_AMBIENTMATERIALSOURCE, D3DMCS_COLOR1);
|
||||
@ -3841,18 +3854,19 @@ update_standard_texture_bindings() {
|
||||
if (/*tex_mat->is_2d() &&*/ texcoord_dimensions <= 2) {
|
||||
// For 2-d texture coordinates, we have to reorder the matrix.
|
||||
LMatrix4 m = tex_mat->get_mat();
|
||||
m.set(m(0, 0), m(0, 1), m(0, 3), 0.0f,
|
||||
m(1, 0), m(1, 1), m(1, 3), 0.0f,
|
||||
m(3, 0), m(3, 1), m(3, 3), 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f);
|
||||
_d3d_device->SetTransform(get_tex_mat_sym(si), (D3DMATRIX *)m.get_data());
|
||||
LMatrix4f mf;
|
||||
mf.set(m(0, 0), m(0, 1), m(0, 3), 0.0f,
|
||||
m(1, 0), m(1, 1), m(1, 3), 0.0f,
|
||||
m(3, 0), m(3, 1), m(3, 3), 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f);
|
||||
_d3d_device->SetTransform(get_tex_mat_sym(si), (D3DMATRIX *)mf.get_data());
|
||||
set_texture_stage_state(si, D3DTSS_TEXTURETRANSFORMFLAGS,
|
||||
D3DTTFF_COUNT2);
|
||||
} else {
|
||||
LMatrix4 m = tex_mat->get_mat();
|
||||
_d3d_device->SetTransform(get_tex_mat_sym(si), (D3DMATRIX *)m.get_data());
|
||||
LMatrix4f mf = LCAST(float, tex_mat->get_mat());
|
||||
_d3d_device->SetTransform(get_tex_mat_sym(si), (D3DMATRIX *)mf.get_data());
|
||||
DWORD transform_flags = texcoord_dimensions;
|
||||
if (m.get_col(3) != LVecBase4(0.0f, 0.0f, 0.0f, 1.0f)) {
|
||||
if (mf.get_col(3) != LVecBase4f(0.0f, 0.0f, 0.0f, 1.0f)) {
|
||||
// If we have a projected texture matrix, we also need to
|
||||
// set D3DTTFF_COUNT4.
|
||||
transform_flags = D3DTTFF_COUNT4 | D3DTTFF_PROJECTED;
|
||||
@ -4229,13 +4243,13 @@ do_auto_rescale_normal() {
|
||||
////////////////////////////////////////////////////////////////////
|
||||
const D3DCOLORVALUE &DXGraphicsStateGuardian9::
|
||||
get_light_color(Light *light) const {
|
||||
static LColor c;
|
||||
c = light->get_color();
|
||||
c.set(c[0] * _light_color_scale[0],
|
||||
c[1] * _light_color_scale[1],
|
||||
c[2] * _light_color_scale[2],
|
||||
c[3] * _light_color_scale[3]);
|
||||
return *(D3DCOLORVALUE *)c.get_data();
|
||||
LColor c = light->get_color();
|
||||
static LColorf cf;
|
||||
cf.set(c[0] * _light_color_scale[0],
|
||||
c[1] * _light_color_scale[1],
|
||||
c[2] * _light_color_scale[2],
|
||||
c[3] * _light_color_scale[3]);
|
||||
return *(D3DCOLORVALUE *)cf.get_data();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
@ -384,13 +384,12 @@ issue_parameters(GSG *gsg, int altered)
|
||||
if (val) {
|
||||
HRESULT hr;
|
||||
PN_stdfloat v [4];
|
||||
LMatrix4 temp_matrix;
|
||||
LMatrix4f temp_matrix = LCAST(float, *val);
|
||||
|
||||
hr = D3D_OK;
|
||||
|
||||
const PN_stdfloat *data;
|
||||
|
||||
data = val -> get_data ( );
|
||||
const float *data;
|
||||
data = temp_matrix.get_data();
|
||||
|
||||
#if DEBUG_SHADER
|
||||
// DEBUG
|
||||
@ -403,7 +402,7 @@ issue_parameters(GSG *gsg, int altered)
|
||||
switch (_shader->_mat_spec[i]._piece) {
|
||||
case Shader::SMP_whole:
|
||||
// TRANSPOSE REQUIRED
|
||||
temp_matrix.transpose_from (*val);
|
||||
temp_matrix.transpose_in_place();
|
||||
data = temp_matrix.get_data();
|
||||
|
||||
hr = cgD3D9SetUniform (p, data);
|
||||
|
Loading…
x
Reference in New Issue
Block a user