mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-06 13:48:01 +03:00
Don't write stuff when it not needed
This commit is contained in:
+111
-129
@@ -50,13 +50,7 @@ namespace mdl {
|
||||
GL_UNSIGNED_INT,
|
||||
};
|
||||
|
||||
rctx->obj_shader.set_shader_flags(uniform_value);
|
||||
rctx->obj_shader_ubo.WriteMemory(rctx->obj_shader);
|
||||
rctx->obj_batch_ubo.WriteMemory(rctx->obj_batch);
|
||||
|
||||
rctx->obj_shader_ubo.Bind(0);
|
||||
rctx->obj_scene_ubo.Bind(1);
|
||||
rctx->obj_batch_ubo.Bind(2);
|
||||
rctx->set_render_data();
|
||||
|
||||
if (primitive_type == OBJ_PRIMITIVE_TRIANGLE_STRIP && index_format == OBJ_INDEX_U16)
|
||||
shaders_ft.draw_range_elements(GL_TRIANGLE_STRIP,
|
||||
@@ -98,33 +92,26 @@ namespace mdl {
|
||||
|
||||
draw_object_model_mat_load(rctx, *mat);
|
||||
|
||||
vec4 g_material_state_diffuse = rctx->obj_batch.g_material_state_diffuse;
|
||||
vec4 g_material_state_ambient = rctx->obj_batch.g_material_state_ambient;
|
||||
vec4 g_material_state_specular = rctx->obj_batch.g_material_state_specular;
|
||||
vec4 g_material_state_emission = rctx->obj_batch.g_material_state_emission;
|
||||
vec4 g_material_state_shininess = rctx->obj_batch.g_material_state_shininess;
|
||||
const vec4 color = etc->color;
|
||||
|
||||
vec4 color = etc->color;
|
||||
if (etc->constant) {
|
||||
vec4 diffuse = color;
|
||||
vec4 ambient = color * 0.5f;
|
||||
ambient.w = color.w;
|
||||
vec4 emission = etc->constant ? 1.0f : vec4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
vec4 specular = { 0.0f, 0.0f, 0.0f, 1.0f };
|
||||
|
||||
vec4 ambient;
|
||||
*(vec3*)&ambient = *(vec3*)&color * 0.5f;
|
||||
ambient.w = color.w;
|
||||
|
||||
rctx->obj_batch.g_material_state_diffuse = color;
|
||||
rctx->obj_batch.g_material_state_ambient = ambient;
|
||||
rctx->obj_batch.g_material_state_specular = { 0.0f, 0.0f, 0.0f, 1.0f };
|
||||
rctx->obj_batch.g_material_state_emission = etc->constant ? 1.0f : vec4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
rctx->obj_batch.g_material_state_shininess = { 0.0f, 0.0f, 0.0f, 1.0f };
|
||||
|
||||
rctx->obj_batch.g_blend_color = color;
|
||||
rctx->set_batch_material_color(diffuse, ambient, emission,
|
||||
0.0f, specular, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
|
||||
rctx->set_batch_blend_color_offset_color(1.0f, 0.0f);
|
||||
}
|
||||
else
|
||||
rctx->set_batch_blend_color_offset_color(color, 0.0f);
|
||||
|
||||
gl_state_bind_vertex_array(vao);
|
||||
rctx->obj_shader.set_shader_flags(uniform_value);
|
||||
rctx->obj_shader_ubo.WriteMemory(rctx->obj_shader);
|
||||
rctx->obj_batch_ubo.WriteMemory(rctx->obj_batch);
|
||||
|
||||
//shaders_ft.set(SHADER_FT_SIMPLE);
|
||||
shaders_ft.set(etc->constant ? SHADER_FT_CONSTANT : SHADER_FT_SIMPLE);
|
||||
//rctx->set_shader(SHADER_FT_SIMPLE);
|
||||
rctx->set_shader(etc->constant ? SHADER_FT_CONSTANT : SHADER_FT_SIMPLE);
|
||||
rctx->set_render_data();
|
||||
switch (etc->type) {
|
||||
case mdl::ETC_OBJ_TEAPOT:
|
||||
shaders_ft.draw_elements(GL_TRIANGLES, etc->count, GL_UNSIGNED_INT, 0);
|
||||
@@ -179,13 +166,7 @@ namespace mdl {
|
||||
shader::unbind();
|
||||
uniform_value_reset();
|
||||
|
||||
rctx->obj_batch.g_material_state_diffuse = g_material_state_diffuse;
|
||||
rctx->obj_batch.g_material_state_ambient = g_material_state_ambient;
|
||||
rctx->obj_batch.g_material_state_specular = g_material_state_specular;
|
||||
rctx->obj_batch.g_material_state_emission = g_material_state_emission;
|
||||
rctx->obj_batch.g_material_state_shininess = g_material_state_shininess;
|
||||
|
||||
rctx->obj_batch.g_blend_color = 1.0f;
|
||||
rctx->set_batch_blend_color_offset_color(1.0f, 0.0f);
|
||||
}
|
||||
|
||||
void draw_sub_mesh(render_context* rctx, const ObjSubMeshArgs* args, const mat4* mat,
|
||||
@@ -196,9 +177,11 @@ namespace mdl {
|
||||
|
||||
if (args->mats) {
|
||||
const mat4* mats = args->mats;
|
||||
rctx->obj_batch.set_g_joint(mats[0]);
|
||||
|
||||
vec4* g_joint_transforms = rctx->obj_skinning.g_joint_transforms;
|
||||
if (args->mat_count == 2)
|
||||
rctx->set_batch_joint(mats[0]);
|
||||
|
||||
vec4* g_joint_transforms = rctx->data.buffer_skinning_data.g_joint_transforms;
|
||||
|
||||
mat4 mat;
|
||||
for (int32_t i = 0; i < args->mat_count; i++, mats++, g_joint_transforms += 3) {
|
||||
@@ -208,11 +191,9 @@ namespace mdl {
|
||||
g_joint_transforms[2] = mat.row2;
|
||||
}
|
||||
|
||||
rctx->obj_skinning_ssbo.WriteMemory(rctx->obj_skinning);
|
||||
rctx->data.buffer_skinning.WriteMemory(rctx->data.buffer_skinning_data);
|
||||
|
||||
rctx->obj_skinning_ssbo.Bind(0);
|
||||
|
||||
rctx->obj_batch.set_transforms(mat4_identity, rctx->view_mat, rctx->proj_mat);
|
||||
rctx->set_batch_worlds(mat4_identity);
|
||||
|
||||
uniform_value[U_SKINNING] = 1;
|
||||
gl_state_bind_vertex_array(vao);
|
||||
@@ -246,10 +227,8 @@ namespace mdl {
|
||||
}*/
|
||||
|
||||
void draw_sub_mesh_default(render_context* rctx, const ObjSubMeshArgs* args) {
|
||||
if (args->set_blend_color) {
|
||||
rctx->obj_batch.g_blend_color = args->blend_color;
|
||||
rctx->obj_batch.g_offset_color = 0.0f;
|
||||
}
|
||||
if (args->set_blend_color)
|
||||
rctx->set_batch_blend_color_offset_color(args->blend_color, 0.0f);
|
||||
|
||||
if (!args->func)
|
||||
draw_object_vertex_attrib_set_default(rctx, args);
|
||||
@@ -269,20 +248,16 @@ namespace mdl {
|
||||
if (!args->func)
|
||||
draw_object_vertex_attrib_reset_default(args);
|
||||
|
||||
if (args->set_blend_color) {
|
||||
rctx->obj_batch.g_blend_color = 1.0f;
|
||||
rctx->obj_batch.g_offset_color = 0.0f;
|
||||
}
|
||||
if (args->set_blend_color)
|
||||
rctx->set_batch_blend_color_offset_color(1.0f, 0.0f);
|
||||
|
||||
rctx->draw_state->stats.object_draw_count++;
|
||||
}
|
||||
|
||||
void draw_sub_mesh_default_instanced(render_context* rctx,
|
||||
const ObjSubMeshArgs* args, const mat4* mat) {
|
||||
if (args->set_blend_color) {
|
||||
rctx->obj_batch.g_blend_color = args->blend_color;
|
||||
rctx->obj_batch.g_offset_color = 0.0f;
|
||||
}
|
||||
if (args->set_blend_color)
|
||||
rctx->set_batch_blend_color_offset_color(args->blend_color, 0.0f);
|
||||
|
||||
if (!args->func)
|
||||
draw_object_vertex_attrib_set_default(rctx, args);
|
||||
@@ -308,10 +283,8 @@ namespace mdl {
|
||||
if (!args->func)
|
||||
draw_object_vertex_attrib_reset_default(args);
|
||||
|
||||
if (args->set_blend_color) {
|
||||
rctx->obj_batch.g_blend_color = 1.0f;
|
||||
rctx->obj_batch.g_offset_color = 0.0f;
|
||||
}
|
||||
if (args->set_blend_color)
|
||||
rctx->set_batch_blend_color_offset_color(1.0f, 0.0f);
|
||||
|
||||
rctx->draw_state->stats.object_draw_count++;
|
||||
}
|
||||
@@ -346,12 +319,12 @@ namespace mdl {
|
||||
}
|
||||
|
||||
if (chara) {
|
||||
rctx->obj_batch.g_sss_param = { 0.0f, 0.0f, 0.0f, 0.5f };
|
||||
rctx->set_batch_sss_param({ 0.0f, 0.0f, 0.0f, 0.5f });
|
||||
uniform_value[U_SSS_CHARA] = 1;
|
||||
}
|
||||
else {
|
||||
const vec4& sss_param = rctx->sss_data->param;
|
||||
rctx->obj_batch.g_sss_param = { sss_param.x, sss_param.y, sss_param.z, 0.5f };
|
||||
rctx->set_batch_sss_param({ sss_param.x, sss_param.y, sss_param.z, 0.5f });
|
||||
uniform_value[U_SSS_CHARA] = 0;
|
||||
}
|
||||
draw_sub_mesh_default(rctx, args);
|
||||
@@ -410,24 +383,24 @@ namespace mdl {
|
||||
|| args->sub_mesh->attrib.m.transparent)
|
||||
|| attrib.punch_through) {
|
||||
uniform_value[U_ALPHA_TEST] = 1;
|
||||
rctx->obj_batch.g_max_alpha.z = 0.5f;
|
||||
rctx->set_batch_alpha_threshold(0.5f);
|
||||
draw_sub_mesh_translucent(rctx, args);
|
||||
}
|
||||
else {
|
||||
uniform_value[U_ALPHA_TEST] = 0;
|
||||
draw_sub_mesh_translucent(rctx, args);
|
||||
rctx->set_batch_alpha_threshold(0.0f);
|
||||
}
|
||||
else
|
||||
draw_sub_mesh_translucent(rctx, args);
|
||||
}
|
||||
|
||||
void draw_sub_mesh_translucent(render_context* rctx, const ObjSubMeshArgs* args) {
|
||||
const obj_material_data* material = args->material;
|
||||
const std::vector<GLuint>* textures = args->textures;
|
||||
if (rctx->draw_state->shader_index != -1) {
|
||||
rctx->obj_batch.g_material_state_emission = args->emission;
|
||||
rctx->set_batch_material_color_specular(args->emission);
|
||||
draw_object_material_set_uniform(material, false);
|
||||
if (material->material.attrib.m.alpha_texture)
|
||||
uniform_value[U_TEXTURE_COUNT] = 0;
|
||||
shaders_ft.set(rctx->draw_state->shader_index);
|
||||
rctx->set_shader(rctx->draw_state->shader_index);
|
||||
}
|
||||
|
||||
draw_object_vertex_attrib_set_default(rctx, args);
|
||||
@@ -775,16 +748,16 @@ static void draw_object_material_set_default(render_context* rctx, const mdl::Ob
|
||||
|
||||
draw_object_chara_color_fog_set(rctx, args, disable_fog);
|
||||
|
||||
rctx->obj_batch.g_material_state_ambient = material->material.color.ambient;
|
||||
vec4 ambient = material->material.color.ambient;
|
||||
if (!rctx->sss_data->enable)
|
||||
rctx->obj_batch.g_material_state_ambient.w = 1.0f;
|
||||
rctx->obj_batch.g_material_state_diffuse = material->material.color.diffuse;
|
||||
rctx->obj_batch.g_material_state_emission = args->emission;
|
||||
ambient.w = 1.0f;
|
||||
vec4 diffuse = material->material.color.diffuse;
|
||||
vec4 emission = args->emission;
|
||||
vec4 specular = { 0.0f, 0.0f, 0.0f, 1.0f };
|
||||
|
||||
float_t line_light;
|
||||
if (lighting_type == OBJ_MATERIAL_SHADER_LIGHTING_PHONG) {
|
||||
const vec4& specular = material->material.color.specular;
|
||||
rctx->obj_batch.g_material_state_specular = specular;
|
||||
specular = material->material.color.specular;
|
||||
|
||||
float_t luma = vec3::dot(*(vec3*)&specular, { 0.30f, 0.59f, 0.11f });
|
||||
if (luma >= 0.01f || args->texture_color_coefficients.w >= 0.1f)
|
||||
@@ -798,34 +771,22 @@ static void draw_object_material_set_default(render_context* rctx, const mdl::Ob
|
||||
line_light = (float_t)material->material.shader_info.m.line_light * (float_t)(1.0 / 9.0);
|
||||
}
|
||||
else
|
||||
line_light = 0.0;
|
||||
|
||||
if (!use_shader)
|
||||
shaders_ft.set(SHADER_FT_SIMPLE);
|
||||
else if (rctx->draw_state->shader_index != -1)
|
||||
shaders_ft.set(rctx->draw_state->shader_index);
|
||||
else if (material->material.shader.index != -1) {
|
||||
if (material->material.shader.index != SHADER_FT_BLINN)
|
||||
shaders_ft.set(material->material.shader.index);
|
||||
else if (lighting_type == OBJ_MATERIAL_SHADER_LIGHTING_LAMBERT)
|
||||
shaders_ft.set(SHADER_FT_LAMBERT);
|
||||
else if (lighting_type == OBJ_MATERIAL_SHADER_LIGHTING_PHONG)
|
||||
shaders_ft.set(SHADER_FT_BLINN);
|
||||
else
|
||||
shaders_ft.set(SHADER_FT_CONSTANT);
|
||||
}
|
||||
else
|
||||
shaders_ft.set(SHADER_FT_CONSTANT);
|
||||
line_light = 0.0f;
|
||||
|
||||
float_t material_shininess = 0.0f;
|
||||
vec4 fresnel_coefficients;
|
||||
float_t shininess = 0.0f;
|
||||
vec4 texture_color_coefficients;
|
||||
vec4 texture_color_offset;
|
||||
vec4 texture_specular_coefficients;
|
||||
vec4 texture_specular_offset;
|
||||
if (lighting_type != OBJ_MATERIAL_SHADER_LIGHTING_CONSTANT) {
|
||||
float_t material_shininess;
|
||||
if (material->material.shader.index == SHADER_FT_GLASEYE)
|
||||
material_shininess = 10.0f;
|
||||
else {
|
||||
material_shininess = (material->material.color.shininess - 16.0f) * (float_t)(1.0 / 112.0);
|
||||
material_shininess = max_def(material_shininess, 0.0f);
|
||||
}
|
||||
rctx->obj_batch.g_material_state_shininess = { material_shininess, 0.0f, 0.0f, 1.0f };
|
||||
|
||||
float_t fresnel = (float_t)material->material.shader_info.m.fresnel_type;
|
||||
if (fresnel > 9.0f)
|
||||
@@ -834,45 +795,62 @@ static void draw_object_material_set_default(render_context* rctx, const mdl::Ob
|
||||
fresnel = rctx->draw_state->fresnel;
|
||||
fresnel = (fresnel - 1.0f) * 0.12f * 0.82f;
|
||||
|
||||
rctx->obj_batch.g_fresnel_coefficients = { fresnel, 0.18f, line_light, 0.0f };
|
||||
fresnel_coefficients = { fresnel, 0.18f, line_light, 0.0f };
|
||||
|
||||
float_t shininess = max_def(material->material.color.shininess, 1.0f);
|
||||
rctx->obj_batch.g_shininess = { shininess, 0.0f, 0.0f, 0.0f };
|
||||
shininess = max_def(material->material.color.shininess, 1.0f);
|
||||
|
||||
switch (material->material.shader.index) {
|
||||
case SHADER_FT_SKIN: {
|
||||
vec4 texture_color_coefficients = args->texture_color_coefficients;
|
||||
vec4 texture_color_offset = args->texture_color_offset;
|
||||
vec4 texture_specular_coefficients = args->texture_specular_coefficients;
|
||||
vec4 texture_specular_offset = args->texture_specular_offset;
|
||||
texture_color_coefficients = args->texture_color_coefficients;
|
||||
texture_color_offset = args->texture_color_offset;
|
||||
texture_specular_coefficients = args->texture_specular_coefficients;
|
||||
texture_specular_offset = args->texture_specular_offset;
|
||||
|
||||
texture_color_coefficients.w *= 0.015f;
|
||||
texture_specular_coefficients.w *= 0.015f;
|
||||
|
||||
rctx->obj_batch.g_texture_color_coefficients = texture_color_coefficients;
|
||||
rctx->obj_batch.g_texture_color_offset = texture_color_offset;
|
||||
rctx->obj_batch.g_texture_specular_coefficients = texture_specular_coefficients;
|
||||
rctx->obj_batch.g_texture_specular_offset = texture_specular_offset;
|
||||
} break;
|
||||
case SHADER_FT_HAIR:
|
||||
case SHADER_FT_CLOTH:
|
||||
case SHADER_FT_TIGHTS:
|
||||
rctx->obj_batch.g_texture_color_coefficients = {
|
||||
texture_color_coefficients = {
|
||||
1.0f - args->texture_color_coefficients.w * 0.4f,
|
||||
0.0f, 0.0f, args->texture_color_coefficients.w * 0.02f };
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
rctx->set_batch_material_color(diffuse, ambient, emission, material_shininess,
|
||||
specular, fresnel_coefficients, texture_color_coefficients, texture_color_offset,
|
||||
texture_specular_coefficients, texture_specular_offset, shininess);
|
||||
|
||||
if (!use_shader)
|
||||
rctx->set_shader(SHADER_FT_SIMPLE);
|
||||
else if (rctx->draw_state->shader_index != -1)
|
||||
rctx->set_shader(rctx->draw_state->shader_index);
|
||||
else if (material->material.shader.index != -1) {
|
||||
if (material->material.shader.index != SHADER_FT_BLINN)
|
||||
rctx->set_shader(material->material.shader.index);
|
||||
else if (lighting_type == OBJ_MATERIAL_SHADER_LIGHTING_LAMBERT)
|
||||
rctx->set_shader(SHADER_FT_LAMBERT);
|
||||
else if (lighting_type == OBJ_MATERIAL_SHADER_LIGHTING_PHONG)
|
||||
rctx->set_shader(SHADER_FT_BLINN);
|
||||
else
|
||||
rctx->set_shader(SHADER_FT_CONSTANT);
|
||||
}
|
||||
else
|
||||
rctx->set_shader(SHADER_FT_CONSTANT);
|
||||
|
||||
draw_object_material_set_parameter(rctx, material);
|
||||
}
|
||||
|
||||
static void draw_object_material_set_parameter(render_context* rctx, const obj_material_data* mat_data) {
|
||||
vec4 specular;
|
||||
float_t bump_depth;
|
||||
float_t intensity;
|
||||
float_t reflect_uv_scale;
|
||||
float_t refract_uv_scale;
|
||||
float_t inv_bump_depth;
|
||||
bool has_specular;
|
||||
if (rctx->draw_state->use_global_material) {
|
||||
bump_depth = rctx->draw_state->bump_depth;
|
||||
intensity = rctx->draw_state->intensity;
|
||||
@@ -880,9 +858,9 @@ static void draw_object_material_set_parameter(render_context* rctx, const obj_m
|
||||
refract_uv_scale = rctx->draw_state->refract_uv_scale;
|
||||
inv_bump_depth = (1.0f - rctx->draw_state->bump_depth) * 64.0f + 1.0f;
|
||||
|
||||
vec4 specular = mat_data->material.color.specular;
|
||||
specular = mat_data->material.color.specular;
|
||||
specular.w = rctx->draw_state->reflectivity;
|
||||
rctx->obj_batch.g_material_state_specular = specular;
|
||||
has_specular = true;
|
||||
}
|
||||
else {
|
||||
bump_depth = mat_data->material.bump_depth;
|
||||
@@ -890,12 +868,13 @@ static void draw_object_material_set_parameter(render_context* rctx, const obj_m
|
||||
intensity = mat_data->material.color.intensity;
|
||||
refract_uv_scale = 0.1f;
|
||||
inv_bump_depth = (1.0f - bump_depth) * 256.0f + 1.0f;
|
||||
has_specular = false;
|
||||
}
|
||||
|
||||
rctx->obj_batch.g_bump_depth = { inv_bump_depth, bump_depth, 0.0f, 0.0f };
|
||||
rctx->obj_batch.g_intensity = { intensity, max_def(intensity, 1.0f), intensity * 25.5f, 1.0f };
|
||||
rctx->obj_batch.g_reflect_uv_scale = {
|
||||
reflect_uv_scale, reflect_uv_scale, refract_uv_scale, refract_uv_scale };
|
||||
rctx->set_batch_material_parameter(has_specular ? &specular : 0,
|
||||
{ inv_bump_depth, bump_depth, 0.0f, 0.0f },
|
||||
{ intensity, max_def(intensity, 1.0f), intensity * 25.5f, 1.0f },
|
||||
reflect_uv_scale, refract_uv_scale);
|
||||
}
|
||||
|
||||
static void draw_object_material_set_reflect(render_context* rctx, const mdl::ObjSubMeshArgs* args) {
|
||||
@@ -966,11 +945,9 @@ static void draw_object_material_set_reflect(render_context* rctx, const mdl::Ob
|
||||
}
|
||||
|
||||
draw_object_material_set_uniform(material, true);
|
||||
shaders_ft.set(rctx->draw_state->shader_index);
|
||||
rctx->obj_batch.g_material_state_ambient = ambient;
|
||||
rctx->obj_batch.g_material_state_diffuse = diffuse;
|
||||
rctx->obj_batch.g_material_state_emission = emission;
|
||||
rctx->obj_batch.g_material_state_specular = specular;
|
||||
rctx->set_shader(rctx->draw_state->shader_index);
|
||||
rctx->set_batch_material_color(diffuse, ambient, emission,
|
||||
0.0f, specular, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
|
||||
draw_object_material_set_parameter(rctx, args->material);
|
||||
}
|
||||
|
||||
@@ -1028,8 +1005,7 @@ static void draw_object_material_set_uniform(const obj_material_data* mat_data,
|
||||
}
|
||||
|
||||
static void draw_object_model_mat_load(render_context* rctx, const mat4& mat) {
|
||||
rctx->obj_batch.set_transforms(mat, rctx->view_mat, rctx->proj_mat);
|
||||
rctx->obj_batch.set_g_joint(mat);
|
||||
rctx->set_batch_worlds(mat);
|
||||
}
|
||||
|
||||
static void draw_object_vertex_attrib_reset_default(const mdl::ObjSubMeshArgs* args) {
|
||||
@@ -1069,6 +1045,9 @@ static void draw_object_vertex_attrib_set_default(render_context* rctx, const md
|
||||
const obj_mesh* mesh = args->mesh;
|
||||
obj_vertex_format vertex_format = mesh->vertex_format;
|
||||
|
||||
mat4 mats[2];
|
||||
mats[0] = mat4_identity;
|
||||
mats[1] = mat4_identity;
|
||||
bool texcoord_mat_set[4] = { false };
|
||||
const obj_material_data* material = args->material;
|
||||
const obj_material_texture_data* texdata = material->material.texdata;
|
||||
@@ -1091,18 +1070,18 @@ static void draw_object_vertex_attrib_set_default(render_context* rctx, const md
|
||||
|
||||
uint32_t texture_id = texdata->tex_index;
|
||||
|
||||
rctx->obj_batch.set_g_texcoord_transforms(texcoord_index,
|
||||
texdata->tex_coord_mat);
|
||||
mats[texcoord_index] = texdata->tex_coord_mat;
|
||||
if (texdata->shader_info.m.tex_type == OBJ_MATERIAL_TEXTURE_COLOR)
|
||||
for (int32_t k = 0; k < args->texture_transform_count; k++)
|
||||
if (args->texture_transform_array[k].id == texture_id) {
|
||||
rctx->obj_batch.set_g_texcoord_transforms(texcoord_index,
|
||||
args->texture_transform_array[k].mat);
|
||||
mats[texcoord_index] = args->texture_transform_array[k].mat;
|
||||
texcoord_mat_set[texcoord_index] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
rctx->set_batch_texcoord_transforms(mats);
|
||||
|
||||
if (vertex_format & OBJ_VERTEX_BONE_DATA)
|
||||
uniform_value[U_SKINNING] = 1;
|
||||
else
|
||||
@@ -1116,7 +1095,7 @@ static void draw_object_vertex_attrib_set_default(render_context* rctx, const md
|
||||
else
|
||||
uniform_value[U_MORPH_COLOR] = 0;
|
||||
|
||||
rctx->obj_batch.g_morph_weight = { args->morph_weight, 1.0f - args->morph_weight, 0.0f, 0.0f };
|
||||
rctx->set_batch_morph_weight(args->morph_weight);
|
||||
}
|
||||
else {
|
||||
uniform_value[U_MORPH] = 0;
|
||||
@@ -1133,21 +1112,24 @@ static void draw_object_vertex_attrib_set_reflect(render_context* rctx, const md
|
||||
const obj_mesh* mesh = args->mesh;
|
||||
obj_vertex_format vertex_format = mesh->vertex_format;
|
||||
|
||||
mat4 mats[2];
|
||||
mats[0] = mat4_identity;
|
||||
mats[1] = mat4_identity;
|
||||
const obj_material_data* material = args->material;
|
||||
if (material->material.texdata[0].tex_index != -1) {
|
||||
uint32_t tex_index = material->material.texdata[0].tex_index;
|
||||
|
||||
rctx->obj_batch.set_g_texcoord_transforms(0,
|
||||
material->material.texdata[0].tex_coord_mat);
|
||||
mats[0] = material->material.texdata[0].tex_coord_mat;
|
||||
if (material->material.texdata[0].shader_info.m.tex_type == OBJ_MATERIAL_TEXTURE_COLOR)
|
||||
for (int32_t j = 0; j < args->texture_transform_count; j++)
|
||||
if (args->texture_transform_array[j].id == tex_index) {
|
||||
rctx->obj_batch.set_g_texcoord_transforms(0,
|
||||
args->texture_transform_array[j].mat);
|
||||
mats[0] = args->texture_transform_array[j].mat;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
rctx->set_batch_texcoord_transforms(mats);
|
||||
|
||||
if (vertex_format & OBJ_VERTEX_BONE_DATA)
|
||||
uniform_value[U_SKINNING] = 1;
|
||||
else
|
||||
@@ -1161,7 +1143,7 @@ static void draw_object_vertex_attrib_set_reflect(render_context* rctx, const md
|
||||
else
|
||||
uniform_value[U_MORPH_COLOR] = 0;
|
||||
|
||||
rctx->obj_batch.g_morph_weight = { args->morph_weight, 1.0f - args->morph_weight, 0.0f, 0.0f };
|
||||
rctx->set_batch_morph_weight(args->morph_weight);
|
||||
}
|
||||
else {
|
||||
uniform_value[U_MORPH] = 0;
|
||||
|
||||
Reference in New Issue
Block a user