Added KRPipeline::Uniform enum class to replace existing untyped enum.
This commit is contained in:
@@ -550,7 +550,7 @@ void KRCamera::renderPost(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
|||||||
|
|
||||||
KRPipeline *postShader = m_pContext->getPipelineManager()->getPipeline(surface, info);
|
KRPipeline *postShader = m_pContext->getPipelineManager()->getPipeline(surface, info);
|
||||||
|
|
||||||
postShader->setUniform(KRPipeline::KRENGINE_UNIFORM_FADE_COLOR, m_fade_color);
|
postShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_FADE_COLOR, m_fade_color);
|
||||||
postShader->bind(commandBuffer, *this, m_viewport, Matrix4(), nullptr, nullptr, nullptr, KRNode::RENDER_PASS_FORWARD_TRANSPARENT);
|
postShader->bind(commandBuffer, *this, m_viewport, Matrix4(), nullptr, nullptr, nullptr, KRNode::RENDER_PASS_FORWARD_TRANSPARENT);
|
||||||
|
|
||||||
m_pContext->getTextureManager()->selectTexture(GL_TEXTURE_2D, 0, compositeDepthTexture);
|
m_pContext->getTextureManager()->selectTexture(GL_TEXTURE_2D, 0, compositeDepthTexture);
|
||||||
|
|||||||
@@ -152,9 +152,9 @@ void KRDirectionalLight::render(RenderInfo& ri) {
|
|||||||
info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_STRIP;
|
info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_STRIP;
|
||||||
|
|
||||||
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_DIRECTION_VIEW_SPACE, light_direction_view_space);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_LIGHT_DIRECTION_VIEW_SPACE, light_direction_view_space);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_COLOR, m_color);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_LIGHT_COLOR, m_color);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_INTENSITY, m_intensity * 0.01f);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_LIGHT_INTENSITY, m_intensity * 0.01f);
|
||||||
pShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, getModelMatrix(), nullptr, &this_light, nullptr, ri.renderPass);
|
pShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, getModelMatrix(), nullptr, &this_light, nullptr, ri.renderPass);
|
||||||
|
|
||||||
// Render a full screen quad
|
// Render a full screen quad
|
||||||
|
|||||||
@@ -270,9 +270,9 @@ void KRLight::render(RenderInfo& ri) {
|
|||||||
info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_TRIANGLES;
|
info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_TRIANGLES;
|
||||||
KRPipeline *pParticleShader = m_pContext->getPipelineManager()->getPipeline(*ri.surface, info);
|
KRPipeline *pParticleShader = m_pContext->getPipelineManager()->getPipeline(*ri.surface, info);
|
||||||
|
|
||||||
pParticleShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_COLOR, m_color * ri.camera->settings.dust_particle_intensity * m_dust_particle_intensity * m_intensity);
|
pParticleShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_LIGHT_COLOR, m_color * ri.camera->settings.dust_particle_intensity * m_dust_particle_intensity * m_intensity);
|
||||||
pParticleShader->setUniform(KRPipeline::KRENGINE_UNIFORM_PARTICLE_ORIGIN, Matrix4::DotWDiv(Matrix4::Invert(particleModelMatrix), Vector3::Zero()));
|
pParticleShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_PARTICLE_ORIGIN, Matrix4::DotWDiv(Matrix4::Invert(particleModelMatrix), Vector3::Zero()));
|
||||||
pParticleShader->setUniform(KRPipeline::KRENGINE_UNIFORM_FLARE_SIZE, m_dust_particle_size);
|
pParticleShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_FLARE_SIZE, m_dust_particle_size);
|
||||||
pParticleShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, particleModelMatrix, &this_point_light, &this_directional_light, &this_spot_light, ri.renderPass);
|
pParticleShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, particleModelMatrix, &this_point_light, &this_directional_light, &this_spot_light, ri.renderPass);
|
||||||
|
|
||||||
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_RANDOM_PARTICLES, 1.0f);
|
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_RANDOM_PARTICLES, 1.0f);
|
||||||
@@ -322,8 +322,8 @@ void KRLight::render(RenderInfo& ri) {
|
|||||||
float slice_far = -ri.camera->settings.volumetric_environment_max_distance;
|
float slice_far = -ri.camera->settings.volumetric_environment_max_distance;
|
||||||
float slice_spacing = (slice_far - slice_near) / slice_count;
|
float slice_spacing = (slice_far - slice_near) / slice_count;
|
||||||
|
|
||||||
pFogShader->setUniform(KRPipeline::KRENGINE_UNIFORM_SLICE_DEPTH_SCALE, Vector2::Create(slice_near, slice_spacing));
|
pFogShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_SLICE_DEPTH_SCALE, Vector2::Create(slice_near, slice_spacing));
|
||||||
pFogShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_COLOR, (m_color * ri.camera->settings.volumetric_environment_intensity * m_intensity * -slice_spacing / 1000.0f));
|
pFogShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_LIGHT_COLOR, (m_color * ri.camera->settings.volumetric_environment_intensity * m_intensity * -slice_spacing / 1000.0f));
|
||||||
pFogShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, Matrix4(), &this_point_light, &this_directional_light, &this_spot_light, KRNode::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE);
|
pFogShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, Matrix4(), &this_point_light, &this_directional_light, &this_spot_light, KRNode::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE);
|
||||||
|
|
||||||
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_VOLUMETRIC_LIGHTING, 1.0f);
|
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_VOLUMETRIC_LIGHTING, 1.0f);
|
||||||
@@ -411,8 +411,8 @@ void KRLight::render(RenderInfo& ri) {
|
|||||||
|
|
||||||
|
|
||||||
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_MATERIAL_ALPHA, 1.0f);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_MATERIAL_ALPHA, 1.0f);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_FLARE_SIZE, m_flareSize);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_FLARE_SIZE, m_flareSize);
|
||||||
pShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, getModelMatrix(), &ri.point_lights, &ri.directional_lights, &ri.spot_lights, ri.renderPass);
|
pShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, getModelMatrix(), &ri.point_lights, &ri.directional_lights, &ri.spot_lights, ri.renderPass);
|
||||||
|
|
||||||
m_pContext->getTextureManager()->selectTexture(0, m_pFlareTexture, 0.0f, KRTexture::TEXTURE_USAGE_LIGHT_FLARE);
|
m_pContext->getTextureManager()->selectTexture(0, m_pFlareTexture, 0.0f, KRTexture::TEXTURE_USAGE_LIGHT_FLARE);
|
||||||
|
|||||||
@@ -353,11 +353,11 @@ void KRMaterial::bind(const KRNode::RenderInfo& ri, ModelFormat modelFormat, __u
|
|||||||
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
||||||
|
|
||||||
// Rim highlighting parameters
|
// Rim highlighting parameters
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_RIM_COLOR, rim_color);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_RIM_COLOR, rim_color);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_RIM_POWER, rim_power);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_RIM_POWER, rim_power);
|
||||||
|
|
||||||
// Bind bones
|
// Bind bones
|
||||||
if(pShader->hasUniform(KRPipeline::KRENGINE_UNIFORM_BONE_TRANSFORMS)) {
|
if(pShader->hasUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_BONE_TRANSFORMS)) {
|
||||||
float bone_mats[256 * 16];
|
float bone_mats[256 * 16];
|
||||||
float *bone_mat_component = bone_mats;
|
float *bone_mat_component = bone_mats;
|
||||||
for(int bone_index=0; bone_index < bones.size(); bone_index++) {
|
for(int bone_index=0; bone_index < bones.size(); bone_index++) {
|
||||||
@@ -384,40 +384,40 @@ void KRMaterial::bind(const KRNode::RenderInfo& ri, ModelFormat modelFormat, __u
|
|||||||
*bone_mat_component++ = t[i];
|
*bone_mat_component++ = t[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(pShader->hasUniform(KRPipeline::KRENGINE_UNIFORM_BONE_TRANSFORMS)) {
|
if(pShader->hasUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_BONE_TRANSFORMS)) {
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_BONE_TRANSFORMS, (Matrix4*)bone_mats, bones.size());
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_BONE_TRANSFORMS, (Matrix4*)bone_mats, bones.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_MATERIAL_AMBIENT, m_ambientColor + ri.camera->settings.ambient_intensity);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_MATERIAL_AMBIENT, m_ambientColor + ri.camera->settings.ambient_intensity);
|
||||||
|
|
||||||
if(ri.renderPass == KRNode::RENDER_PASS_FORWARD_OPAQUE) {
|
if(ri.renderPass == KRNode::RENDER_PASS_FORWARD_OPAQUE) {
|
||||||
// We pre-multiply the light color with the material color in the forward renderer
|
// We pre-multiply the light color with the material color in the forward renderer
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_MATERIAL_DIFFUSE, Vector3::Create(m_diffuseColor.x * ri.camera->settings.light_intensity.x, m_diffuseColor.y * ri.camera->settings.light_intensity.y, m_diffuseColor.z * ri.camera->settings.light_intensity.z));
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_MATERIAL_DIFFUSE, Vector3::Create(m_diffuseColor.x * ri.camera->settings.light_intensity.x, m_diffuseColor.y * ri.camera->settings.light_intensity.y, m_diffuseColor.z * ri.camera->settings.light_intensity.z));
|
||||||
} else {
|
} else {
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_MATERIAL_DIFFUSE, m_diffuseColor);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_MATERIAL_DIFFUSE, m_diffuseColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ri.renderPass == KRNode::RENDER_PASS_FORWARD_OPAQUE) {
|
if(ri.renderPass == KRNode::RENDER_PASS_FORWARD_OPAQUE) {
|
||||||
// We pre-multiply the light color with the material color in the forward renderer
|
// We pre-multiply the light color with the material color in the forward renderer
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_MATERIAL_SPECULAR, Vector3::Create(m_specularColor.x * ri.camera->settings.light_intensity.x, m_specularColor.y * ri.camera->settings.light_intensity.y, m_specularColor.z * ri.camera->settings.light_intensity.z));
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_MATERIAL_SPECULAR, Vector3::Create(m_specularColor.x * ri.camera->settings.light_intensity.x, m_specularColor.y * ri.camera->settings.light_intensity.y, m_specularColor.z * ri.camera->settings.light_intensity.z));
|
||||||
} else {
|
} else {
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_MATERIAL_SPECULAR, m_specularColor);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_MATERIAL_SPECULAR, m_specularColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_MATERIAL_SHININESS, m_ns);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_MATERIAL_SHININESS, m_ns);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_MATERIAL_REFLECTION, m_reflectionColor);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_MATERIAL_REFLECTION, m_reflectionColor);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_DIFFUSETEXTURE_SCALE, m_diffuseMapScale);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_DIFFUSETEXTURE_SCALE, m_diffuseMapScale);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_SPECULARTEXTURE_SCALE, m_specularMapScale);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_SPECULARTEXTURE_SCALE, m_specularMapScale);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_REFLECTIONTEXTURE_SCALE, m_reflectionMapScale);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_REFLECTIONTEXTURE_SCALE, m_reflectionMapScale);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_NORMALTEXTURE_SCALE, m_normalMapScale);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_NORMALTEXTURE_SCALE, m_normalMapScale);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_DIFFUSETEXTURE_OFFSET, m_diffuseMapOffset);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_DIFFUSETEXTURE_OFFSET, m_diffuseMapOffset);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_SPECULARTEXTURE_OFFSET, m_specularMapOffset);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_SPECULARTEXTURE_OFFSET, m_specularMapOffset);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_REFLECTIONTEXTURE_OFFSET, m_reflectionMapOffset);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_REFLECTIONTEXTURE_OFFSET, m_reflectionMapOffset);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_NORMALTEXTURE_OFFSET, m_normalMapOffset);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_NORMALTEXTURE_OFFSET, m_normalMapOffset);
|
||||||
|
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_MATERIAL_ALPHA, m_tr);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_MATERIAL_ALPHA, m_tr);
|
||||||
|
|
||||||
if(bDiffuseMap) {
|
if(bDiffuseMap) {
|
||||||
m_pContext->getTextureManager()->selectTexture(0, m_pDiffuseMap, lod_coverage, KRTexture::TEXTURE_USAGE_DIFFUSE_MAP);
|
m_pContext->getTextureManager()->selectTexture(0, m_pDiffuseMap, lod_coverage, KRTexture::TEXTURE_USAGE_DIFFUSE_MAP);
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ void KRParticleSystemNewtonian::render(RenderInfo& ri) {
|
|||||||
info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_TRIANGLES;
|
info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_TRIANGLES;
|
||||||
|
|
||||||
KRPipeline *pParticleShader = m_pContext->getPipelineManager()->getPipeline(*ri.surface, info);
|
KRPipeline *pParticleShader = m_pContext->getPipelineManager()->getPipeline(*ri.surface, info);
|
||||||
pParticleShader->setUniform(KRPipeline::KRENGINE_UNIFORM_FLARE_SIZE, 1.0f);
|
pParticleShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_FLARE_SIZE, 1.0f);
|
||||||
pParticleShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, getModelMatrix(), &ri.point_lights, &ri.directional_lights, &ri.spot_lights, ri.renderPass);
|
pParticleShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, getModelMatrix(), &ri.point_lights, &ri.directional_lights, &ri.spot_lights, ri.renderPass);
|
||||||
|
|
||||||
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_RANDOM_PARTICLES, 1.0f);
|
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_RANDOM_PARTICLES, 1.0f);
|
||||||
|
|||||||
@@ -116,8 +116,8 @@ KRPipeline::KRPipeline(KRContext& context, KRSurface& surface, const PipelineInf
|
|||||||
, m_pushConstantBufferSize(0)
|
, m_pushConstantBufferSize(0)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < static_cast<int>(ShaderStages::shaderStageCount); i++) {
|
for (int i = 0; i < static_cast<int>(ShaderStages::shaderStageCount); i++) {
|
||||||
memset(m_pushConstants[i].size, 0, KRENGINE_NUM_UNIFORMS);
|
memset(m_pushConstants[i].size, 0, kUniformCount);
|
||||||
memset(m_pushConstants[i].offset, 0, KRENGINE_NUM_UNIFORMS * sizeof(int));
|
memset(m_pushConstants[i].offset, 0, kUniformCount * sizeof(int));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_pipelineLayout = nullptr;
|
m_pipelineLayout = nullptr;
|
||||||
@@ -198,7 +198,7 @@ KRPipeline::KRPipeline(KRContext& context, KRSurface& surface, const PipelineInf
|
|||||||
m_pushConstantBufferSize = block.size;
|
m_pushConstantBufferSize = block.size;
|
||||||
|
|
||||||
// Get push constant offsets
|
// Get push constant offsets
|
||||||
for (int iUniform = 0; iUniform < KRENGINE_NUM_UNIFORMS; iUniform++) {
|
for (int iUniform = 0; iUniform < static_cast<int>(Uniform::KRENGINE_NUM_UNIFORMS); iUniform++) {
|
||||||
for (int iMember = 0; iMember < block.member_count; iMember++) {
|
for (int iMember = 0; iMember < block.member_count; iMember++) {
|
||||||
const SpvReflectBlockVariable& member = block.members[iMember];
|
const SpvReflectBlockVariable& member = block.members[iMember];
|
||||||
if (stricmp(KRENGINE_UNIFORM_NAMES[iUniform], member.name) == 0)
|
if (stricmp(KRENGINE_UNIFORM_NAMES[iUniform], member.name) == 0)
|
||||||
@@ -475,72 +475,72 @@ KRPipeline::~KRPipeline() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRPipeline::setUniform(int location, float value)
|
void KRPipeline::setUniform(Uniform location, float value)
|
||||||
{
|
{
|
||||||
if (m_pushConstants[0].size[location] == sizeof(value)) {
|
if (m_pushConstants[0].size[static_cast<size_t>(location)] == sizeof(value)) {
|
||||||
float* constant = (float*)(m_pushConstantBuffer + m_pushConstants[0].offset[location]);
|
float* constant = (float*)(m_pushConstantBuffer + m_pushConstants[0].offset[static_cast<size_t>(location)]);
|
||||||
*constant = value;
|
*constant = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRPipeline::hasUniform(int location) const
|
bool KRPipeline::hasUniform(Uniform location) const
|
||||||
{
|
{
|
||||||
for (int i = 0; i < static_cast<int>(ShaderStages::shaderStageCount); i++) {
|
for (int i = 0; i < static_cast<int>(ShaderStages::shaderStageCount); i++) {
|
||||||
if (m_pushConstants[i].size) {
|
if (m_pushConstants[i].size[static_cast<size_t>(location)]) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRPipeline::setUniform(int location, int value)
|
void KRPipeline::setUniform(Uniform location, int value)
|
||||||
{
|
{
|
||||||
if (m_pushConstants[0].size[location] == sizeof(value)) {
|
if (m_pushConstants[0].size[static_cast<size_t>(location)] == sizeof(value)) {
|
||||||
int* constant = (int*)(m_pushConstantBuffer + m_pushConstants[0].offset[location]);
|
int* constant = (int*)(m_pushConstantBuffer + m_pushConstants[0].offset[static_cast<size_t>(location)]);
|
||||||
*constant = value;
|
*constant = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRPipeline::setUniform(int location, const Vector2 &value)
|
void KRPipeline::setUniform(Uniform location, const Vector2 &value)
|
||||||
{
|
{
|
||||||
if (m_pushConstants[0].size[location] == sizeof(value)) {
|
if (m_pushConstants[0].size[static_cast<size_t>(location)] == sizeof(value)) {
|
||||||
Vector2* constant = (Vector2*)(m_pushConstantBuffer + m_pushConstants[0].offset[location]);
|
Vector2* constant = (Vector2*)(m_pushConstantBuffer + m_pushConstants[0].offset[static_cast<size_t>(location)]);
|
||||||
*constant = value;
|
*constant = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void KRPipeline::setUniform(int location, const Vector3 &value)
|
void KRPipeline::setUniform(Uniform location, const Vector3 &value)
|
||||||
{
|
{
|
||||||
if (m_pushConstants[0].size[location] == sizeof(value)) {
|
if (m_pushConstants[0].size[static_cast<size_t>(location)] == sizeof(value)) {
|
||||||
Vector3* constant = (Vector3*)(m_pushConstantBuffer + m_pushConstants[0].offset[location]);
|
Vector3* constant = (Vector3*)(m_pushConstantBuffer + m_pushConstants[0].offset[static_cast<size_t>(location)]);
|
||||||
*constant = value;
|
*constant = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRPipeline::setUniform(int location, const Vector4 &value)
|
void KRPipeline::setUniform(Uniform location, const Vector4 &value)
|
||||||
{
|
{
|
||||||
if (m_pushConstants[0].size[location] == sizeof(value)) {
|
if (m_pushConstants[0].size[static_cast<size_t>(location)] == sizeof(value)) {
|
||||||
Vector4* constant = (Vector4*)(m_pushConstantBuffer + m_pushConstants[0].offset[location]);
|
Vector4* constant = (Vector4*)(m_pushConstantBuffer + m_pushConstants[0].offset[static_cast<size_t>(location)]);
|
||||||
*constant = value;
|
*constant = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRPipeline::setUniform(int location, const Matrix4 &value)
|
void KRPipeline::setUniform(Uniform location, const Matrix4 &value)
|
||||||
{
|
{
|
||||||
if (m_pushConstants[0].size[location] == sizeof(value)) {
|
if (m_pushConstants[0].size[static_cast<size_t>(location)] == sizeof(value)) {
|
||||||
Matrix4* constant = (Matrix4*)(m_pushConstantBuffer + m_pushConstants[0].offset[location]);
|
Matrix4* constant = (Matrix4*)(m_pushConstantBuffer + m_pushConstants[0].offset[static_cast<size_t>(location)]);
|
||||||
*constant = value;
|
*constant = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRPipeline::setUniform(int location, const Matrix4* value, const size_t count)
|
void KRPipeline::setUniform(Uniform location, const Matrix4* value, const size_t count)
|
||||||
{
|
{
|
||||||
// TODO - Vulkan refactoring
|
// TODO - Vulkan refactoring
|
||||||
// GLDEBUG(glUniformMatrix4fv(pShader->m_pushConstants[0].offset[KRPipeline::KRENGINE_UNIFORM_BONE_TRANSFORMS], (GLsizei)bones.size(), GL_FALSE, bone_mats));
|
// GLDEBUG(glUniformMatrix4fv(pShader->m_pushConstants[0].offset[KRPipeline::Uniform::KRENGINE_UNIFORM_BONE_TRANSFORMS], (GLsizei)bones.size(), GL_FALSE, bone_mats));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KRPipeline::bind(VkCommandBuffer& commandBuffer, KRCamera &camera, const KRViewport &viewport, const Matrix4 &matModel, const std::vector<KRPointLight *> *point_lights, const std::vector<KRDirectionalLight *> *directional_lights, const std::vector<KRSpotLight *> *spot_lights, const KRNode::RenderPass &renderPass)
|
bool KRPipeline::bind(VkCommandBuffer& commandBuffer, KRCamera &camera, const KRViewport &viewport, const Matrix4 &matModel, const std::vector<KRPointLight *> *point_lights, const std::vector<KRDirectionalLight *> *directional_lights, const std::vector<KRSpotLight *> *spot_lights, const KRNode::RenderPass &renderPass)
|
||||||
{
|
{
|
||||||
setUniform(KRENGINE_UNIFORM_ABSOLUTE_TIME, getContext().getAbsoluteTime());
|
setUniform(Uniform::KRENGINE_UNIFORM_ABSOLUTE_TIME, getContext().getAbsoluteTime());
|
||||||
|
|
||||||
int light_directional_count = 0;
|
int light_directional_count = 0;
|
||||||
//int light_point_count = 0;
|
//int light_point_count = 0;
|
||||||
@@ -554,7 +554,7 @@ bool KRPipeline::bind(VkCommandBuffer& commandBuffer, KRCamera &camera, const KR
|
|||||||
KRDirectionalLight* directional_light = (*light_itr);
|
KRDirectionalLight* directional_light = (*light_itr);
|
||||||
if (light_directional_count == 0) {
|
if (light_directional_count == 0) {
|
||||||
int cShadowBuffers = directional_light->getShadowBufferCount();
|
int cShadowBuffers = directional_light->getShadowBufferCount();
|
||||||
if (m_pushConstants[0].size[KRENGINE_UNIFORM_SHADOWTEXTURE1] && cShadowBuffers > 0) {
|
if (hasUniform(Uniform::KRENGINE_UNIFORM_SHADOWTEXTURE1) && cShadowBuffers > 0) {
|
||||||
if (m_pContext->getTextureManager()->selectTexture(GL_TEXTURE_2D, 3, directional_light->getShadowTextures()[0])) {
|
if (m_pContext->getTextureManager()->selectTexture(GL_TEXTURE_2D, 3, directional_light->getShadowTextures()[0])) {
|
||||||
GLDEBUG(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
GLDEBUG(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
||||||
GLDEBUG(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
|
GLDEBUG(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
|
||||||
@@ -564,7 +564,7 @@ bool KRPipeline::bind(VkCommandBuffer& commandBuffer, KRCamera &camera, const KR
|
|||||||
m_pContext->getTextureManager()->_setWrapModeT(3, GL_CLAMP_TO_EDGE);
|
m_pContext->getTextureManager()->_setWrapModeT(3, GL_CLAMP_TO_EDGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_pushConstants[0].size[KRENGINE_UNIFORM_SHADOWTEXTURE2] && cShadowBuffers > 1 && camera.settings.m_cShadowBuffers > 1) {
|
if (hasUniform(Uniform::KRENGINE_UNIFORM_SHADOWTEXTURE2) && cShadowBuffers > 1 && camera.settings.m_cShadowBuffers > 1) {
|
||||||
if (m_pContext->getTextureManager()->selectTexture(GL_TEXTURE_2D, 4, directional_light->getShadowTextures()[1])) {
|
if (m_pContext->getTextureManager()->selectTexture(GL_TEXTURE_2D, 4, directional_light->getShadowTextures()[1])) {
|
||||||
GLDEBUG(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
GLDEBUG(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
||||||
GLDEBUG(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
|
GLDEBUG(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
|
||||||
@@ -573,7 +573,7 @@ bool KRPipeline::bind(VkCommandBuffer& commandBuffer, KRCamera &camera, const KR
|
|||||||
m_pContext->getTextureManager()->_setWrapModeT(4, GL_CLAMP_TO_EDGE);
|
m_pContext->getTextureManager()->_setWrapModeT(4, GL_CLAMP_TO_EDGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_pushConstants[0].size[KRENGINE_UNIFORM_SHADOWTEXTURE3] && cShadowBuffers > 2 && camera.settings.m_cShadowBuffers > 2) {
|
if (hasUniform(Uniform::KRENGINE_UNIFORM_SHADOWTEXTURE3) && cShadowBuffers > 2 && camera.settings.m_cShadowBuffers > 2) {
|
||||||
if (m_pContext->getTextureManager()->selectTexture(GL_TEXTURE_2D, 5, directional_light->getShadowTextures()[2])) {
|
if (m_pContext->getTextureManager()->selectTexture(GL_TEXTURE_2D, 5, directional_light->getShadowTextures()[2])) {
|
||||||
GLDEBUG(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
GLDEBUG(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
||||||
GLDEBUG(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
|
GLDEBUG(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
|
||||||
@@ -586,17 +586,17 @@ bool KRPipeline::bind(VkCommandBuffer& commandBuffer, KRCamera &camera, const KR
|
|||||||
matBias.translate(1.0, 1.0, 1.0);
|
matBias.translate(1.0, 1.0, 1.0);
|
||||||
matBias.scale(0.5);
|
matBias.scale(0.5);
|
||||||
for (int iShadow = 0; iShadow < cShadowBuffers; iShadow++) {
|
for (int iShadow = 0; iShadow < cShadowBuffers; iShadow++) {
|
||||||
setUniform(KRENGINE_UNIFORM_SHADOWMVP1 + iShadow, matModel * directional_light->getShadowViewports()[iShadow].getViewProjectionMatrix() * matBias);
|
setUniform(static_cast<Uniform>(static_cast<int>(Uniform::KRENGINE_UNIFORM_SHADOWMVP1) + iShadow), matModel * directional_light->getShadowViewports()[iShadow].getViewProjectionMatrix() * matBias);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_pushConstants[0].size[KRENGINE_UNIFORM_LIGHT_DIRECTION_MODEL_SPACE]) {
|
if (hasUniform(Uniform::KRENGINE_UNIFORM_LIGHT_DIRECTION_MODEL_SPACE)) {
|
||||||
Matrix4 inverseModelMatrix = matModel;
|
Matrix4 inverseModelMatrix = matModel;
|
||||||
inverseModelMatrix.invert();
|
inverseModelMatrix.invert();
|
||||||
|
|
||||||
// Bind the light direction vector
|
// Bind the light direction vector
|
||||||
Vector3 lightDirObject = Matrix4::Dot(inverseModelMatrix, directional_light->getWorldLightDirection());
|
Vector3 lightDirObject = Matrix4::Dot(inverseModelMatrix, directional_light->getWorldLightDirection());
|
||||||
lightDirObject.normalize();
|
lightDirObject.normalize();
|
||||||
setUniform(KRENGINE_UNIFORM_LIGHT_DIRECTION_MODEL_SPACE, lightDirObject);
|
setUniform(Uniform::KRENGINE_UNIFORM_LIGHT_DIRECTION_MODEL_SPACE, lightDirObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -608,57 +608,57 @@ bool KRPipeline::bind(VkCommandBuffer& commandBuffer, KRCamera &camera, const KR
|
|||||||
//light_spot_count = spot_lights.size();
|
//light_spot_count = spot_lights.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRENGINE_UNIFORM_CAMERAPOS_MODEL_SPACE]) {
|
if(hasUniform(Uniform::KRENGINE_UNIFORM_CAMERAPOS_MODEL_SPACE)) {
|
||||||
Matrix4 inverseModelMatrix = matModel;
|
Matrix4 inverseModelMatrix = matModel;
|
||||||
inverseModelMatrix.invert();
|
inverseModelMatrix.invert();
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRENGINE_UNIFORM_CAMERAPOS_MODEL_SPACE]) {
|
if(hasUniform(Uniform::KRENGINE_UNIFORM_CAMERAPOS_MODEL_SPACE)) {
|
||||||
// Transform location of camera to object space for calculation of specular halfVec
|
// Transform location of camera to object space for calculation of specular halfVec
|
||||||
Vector3 cameraPosObject = Matrix4::Dot(inverseModelMatrix, viewport.getCameraPosition());
|
Vector3 cameraPosObject = Matrix4::Dot(inverseModelMatrix, viewport.getCameraPosition());
|
||||||
setUniform(KRENGINE_UNIFORM_CAMERAPOS_MODEL_SPACE, cameraPosObject);
|
setUniform(Uniform::KRENGINE_UNIFORM_CAMERAPOS_MODEL_SPACE, cameraPosObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRENGINE_UNIFORM_MVP] || m_pushConstants[0].size[KRPipeline::KRENGINE_UNIFORM_INVMVP]) {
|
if(hasUniform(Uniform::KRENGINE_UNIFORM_MVP) || hasUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_INVMVP)) {
|
||||||
// Bind our modelmatrix variable to be a uniform called mvpmatrix in our shaderprogram
|
// Bind our modelmatrix variable to be a uniform called mvpmatrix in our shaderprogram
|
||||||
Matrix4 mvpMatrix = matModel * viewport.getViewProjectionMatrix();
|
Matrix4 mvpMatrix = matModel * viewport.getViewProjectionMatrix();
|
||||||
setUniform(KRENGINE_UNIFORM_MVP, mvpMatrix);
|
setUniform(Uniform::KRENGINE_UNIFORM_MVP, mvpMatrix);
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRPipeline::KRENGINE_UNIFORM_INVMVP]) {
|
if(hasUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_INVMVP)) {
|
||||||
setUniform(KRPipeline::KRENGINE_UNIFORM_INVMVP, Matrix4::Invert(mvpMatrix));
|
setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_INVMVP, Matrix4::Invert(mvpMatrix));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRPipeline::KRENGINE_UNIFORM_VIEW_SPACE_MODEL_ORIGIN] || m_pushConstants[0].size[KRENGINE_UNIFORM_MODEL_VIEW_INVERSE_TRANSPOSE] || m_pushConstants[0].size[KRPipeline::KRENGINE_UNIFORM_MODEL_VIEW]) {
|
if(hasUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_VIEW_SPACE_MODEL_ORIGIN) || hasUniform(Uniform::KRENGINE_UNIFORM_MODEL_VIEW_INVERSE_TRANSPOSE) || hasUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_MODEL_VIEW)) {
|
||||||
Matrix4 matModelView = matModel * viewport.getViewMatrix();
|
Matrix4 matModelView = matModel * viewport.getViewMatrix();
|
||||||
setUniform(KRENGINE_UNIFORM_MODEL_VIEW, matModelView);
|
setUniform(Uniform::KRENGINE_UNIFORM_MODEL_VIEW, matModelView);
|
||||||
|
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRPipeline::KRENGINE_UNIFORM_VIEW_SPACE_MODEL_ORIGIN]) {
|
if(hasUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_VIEW_SPACE_MODEL_ORIGIN)) {
|
||||||
Vector3 view_space_model_origin = Matrix4::Dot(matModelView, Vector3::Zero()); // Origin point of model space is the light source position. No perspective, so no w divide required
|
Vector3 view_space_model_origin = Matrix4::Dot(matModelView, Vector3::Zero()); // Origin point of model space is the light source position. No perspective, so no w divide required
|
||||||
setUniform(KRENGINE_UNIFORM_VIEW_SPACE_MODEL_ORIGIN, view_space_model_origin);
|
setUniform(Uniform::KRENGINE_UNIFORM_VIEW_SPACE_MODEL_ORIGIN, view_space_model_origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRENGINE_UNIFORM_MODEL_VIEW_INVERSE_TRANSPOSE]) {
|
if(hasUniform(Uniform::KRENGINE_UNIFORM_MODEL_VIEW_INVERSE_TRANSPOSE)) {
|
||||||
Matrix4 matModelViewInverseTranspose = matModelView;
|
Matrix4 matModelViewInverseTranspose = matModelView;
|
||||||
matModelViewInverseTranspose.transpose();
|
matModelViewInverseTranspose.transpose();
|
||||||
matModelViewInverseTranspose.invert();
|
matModelViewInverseTranspose.invert();
|
||||||
setUniform(KRENGINE_UNIFORM_MODEL_VIEW_INVERSE_TRANSPOSE, matModelViewInverseTranspose);
|
setUniform(Uniform::KRENGINE_UNIFORM_MODEL_VIEW_INVERSE_TRANSPOSE, matModelViewInverseTranspose);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRENGINE_UNIFORM_MODEL_INVERSE_TRANSPOSE]) {
|
if(hasUniform(Uniform::KRENGINE_UNIFORM_MODEL_INVERSE_TRANSPOSE)) {
|
||||||
Matrix4 matModelInverseTranspose = matModel;
|
Matrix4 matModelInverseTranspose = matModel;
|
||||||
matModelInverseTranspose.transpose();
|
matModelInverseTranspose.transpose();
|
||||||
matModelInverseTranspose.invert();
|
matModelInverseTranspose.invert();
|
||||||
setUniform(KRENGINE_UNIFORM_MODEL_INVERSE_TRANSPOSE, matModelInverseTranspose);
|
setUniform(Uniform::KRENGINE_UNIFORM_MODEL_INVERSE_TRANSPOSE, matModelInverseTranspose);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRPipeline::KRENGINE_UNIFORM_INVP]) {
|
if(hasUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_INVP)) {
|
||||||
setUniform(KRENGINE_UNIFORM_INVP, viewport.getInverseProjectionMatrix());
|
setUniform(Uniform::KRENGINE_UNIFORM_INVP, viewport.getInverseProjectionMatrix());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRPipeline::KRENGINE_UNIFORM_INVMVP_NO_TRANSLATE]) {
|
if(hasUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_INVMVP_NO_TRANSLATE)) {
|
||||||
Matrix4 matInvMVPNoTranslate = matModel * viewport.getViewMatrix();;
|
Matrix4 matInvMVPNoTranslate = matModel * viewport.getViewMatrix();;
|
||||||
// Remove the translation
|
// Remove the translation
|
||||||
matInvMVPNoTranslate.getPointer()[3] = 0;
|
matInvMVPNoTranslate.getPointer()[3] = 0;
|
||||||
@@ -670,16 +670,16 @@ bool KRPipeline::bind(VkCommandBuffer& commandBuffer, KRCamera &camera, const KR
|
|||||||
matInvMVPNoTranslate.getPointer()[15] = 1.0;
|
matInvMVPNoTranslate.getPointer()[15] = 1.0;
|
||||||
matInvMVPNoTranslate = matInvMVPNoTranslate * viewport.getProjectionMatrix();
|
matInvMVPNoTranslate = matInvMVPNoTranslate * viewport.getProjectionMatrix();
|
||||||
matInvMVPNoTranslate.invert();
|
matInvMVPNoTranslate.invert();
|
||||||
setUniform(KRENGINE_UNIFORM_INVMVP_NO_TRANSLATE, matInvMVPNoTranslate);
|
setUniform(Uniform::KRENGINE_UNIFORM_INVMVP_NO_TRANSLATE, matInvMVPNoTranslate);
|
||||||
}
|
}
|
||||||
|
|
||||||
setUniform(KRENGINE_UNIFORM_MODEL_MATRIX, matModel);
|
setUniform(Uniform::KRENGINE_UNIFORM_MODEL_MATRIX, matModel);
|
||||||
if(m_pushConstants[0].size[KRENGINE_UNIFORM_PROJECTION_MATRIX]) {
|
if(hasUniform(Uniform::KRENGINE_UNIFORM_PROJECTION_MATRIX)) {
|
||||||
setUniform(KRENGINE_UNIFORM_PROJECTION_MATRIX, viewport.getProjectionMatrix());
|
setUniform(Uniform::KRENGINE_UNIFORM_PROJECTION_MATRIX, viewport.getProjectionMatrix());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRENGINE_UNIFORM_VIEWPORT]) {
|
if(hasUniform(Uniform::KRENGINE_UNIFORM_VIEWPORT)) {
|
||||||
setUniform(KRENGINE_UNIFORM_VIEWPORT, Vector4::Create(
|
setUniform(Uniform::KRENGINE_UNIFORM_VIEWPORT, Vector4::Create(
|
||||||
(float)0.0,
|
(float)0.0,
|
||||||
(float)0.0,
|
(float)0.0,
|
||||||
(float)viewport.getSize().x,
|
(float)viewport.getSize().x,
|
||||||
@@ -688,47 +688,47 @@ bool KRPipeline::bind(VkCommandBuffer& commandBuffer, KRCamera &camera, const KR
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRENGINE_UNIFORM_VIEWPORT_DOWNSAMPLE]) {
|
if(hasUniform(Uniform::KRENGINE_UNIFORM_VIEWPORT_DOWNSAMPLE)) {
|
||||||
setUniform(KRENGINE_UNIFORM_VIEWPORT_DOWNSAMPLE, camera.getDownsample());
|
setUniform(Uniform::KRENGINE_UNIFORM_VIEWPORT_DOWNSAMPLE, camera.getDownsample());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fog parameters
|
// Fog parameters
|
||||||
setUniform(KRENGINE_UNIFORM_FOG_NEAR, camera.settings.fog_near);
|
setUniform(Uniform::KRENGINE_UNIFORM_FOG_NEAR, camera.settings.fog_near);
|
||||||
setUniform(KRENGINE_UNIFORM_FOG_FAR, camera.settings.fog_far);
|
setUniform(Uniform::KRENGINE_UNIFORM_FOG_FAR, camera.settings.fog_far);
|
||||||
setUniform(KRENGINE_UNIFORM_FOG_DENSITY, camera.settings.fog_density);
|
setUniform(Uniform::KRENGINE_UNIFORM_FOG_DENSITY, camera.settings.fog_density);
|
||||||
setUniform(KRENGINE_UNIFORM_FOG_COLOR, camera.settings.fog_color);
|
setUniform(Uniform::KRENGINE_UNIFORM_FOG_COLOR, camera.settings.fog_color);
|
||||||
|
|
||||||
if(m_pushConstants[0].size[KRENGINE_UNIFORM_FOG_SCALE]) {
|
if(hasUniform(Uniform::KRENGINE_UNIFORM_FOG_SCALE)) {
|
||||||
setUniform(KRENGINE_UNIFORM_FOG_SCALE, 1.0f / (camera.settings.fog_far - camera.settings.fog_near));
|
setUniform(Uniform::KRENGINE_UNIFORM_FOG_SCALE, 1.0f / (camera.settings.fog_far - camera.settings.fog_near));
|
||||||
}
|
}
|
||||||
if(m_pushConstants[0].size[KRENGINE_UNIFORM_DENSITY_PREMULTIPLIED_EXPONENTIAL]) {
|
if(hasUniform(Uniform::KRENGINE_UNIFORM_DENSITY_PREMULTIPLIED_EXPONENTIAL)) {
|
||||||
setUniform(KRENGINE_UNIFORM_DENSITY_PREMULTIPLIED_EXPONENTIAL, -camera.settings.fog_density * 1.442695f); // -fog_density / log(2)
|
setUniform(Uniform::KRENGINE_UNIFORM_DENSITY_PREMULTIPLIED_EXPONENTIAL, -camera.settings.fog_density * 1.442695f); // -fog_density / log(2)
|
||||||
}
|
}
|
||||||
if(m_pushConstants[0].size[KRENGINE_UNIFORM_DENSITY_PREMULTIPLIED_SQUARED]) {
|
if(hasUniform(Uniform::KRENGINE_UNIFORM_DENSITY_PREMULTIPLIED_SQUARED)) {
|
||||||
setUniform(KRENGINE_UNIFORM_DENSITY_PREMULTIPLIED_SQUARED, (float)(-camera.settings.fog_density * camera.settings.fog_density * 1.442695)); // -fog_density * fog_density / log(2)
|
setUniform(Uniform::KRENGINE_UNIFORM_DENSITY_PREMULTIPLIED_SQUARED, (float)(-camera.settings.fog_density * camera.settings.fog_density * 1.442695)); // -fog_density * fog_density / log(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sets the diffuseTexture variable to the first texture unit
|
// Sets the diffuseTexture variable to the first texture unit
|
||||||
setUniform(KRENGINE_UNIFORM_DIFFUSETEXTURE, 0);
|
setUniform(Uniform::KRENGINE_UNIFORM_DIFFUSETEXTURE, 0);
|
||||||
|
|
||||||
// Sets the specularTexture variable to the second texture unit
|
// Sets the specularTexture variable to the second texture unit
|
||||||
setUniform(KRENGINE_UNIFORM_SPECULARTEXTURE, 1);
|
setUniform(Uniform::KRENGINE_UNIFORM_SPECULARTEXTURE, 1);
|
||||||
|
|
||||||
// Sets the normalTexture variable to the third texture unit
|
// Sets the normalTexture variable to the third texture unit
|
||||||
setUniform(KRENGINE_UNIFORM_NORMALTEXTURE, 2);
|
setUniform(Uniform::KRENGINE_UNIFORM_NORMALTEXTURE, 2);
|
||||||
|
|
||||||
// Sets the shadowTexture variable to the fourth texture unit
|
// Sets the shadowTexture variable to the fourth texture unit
|
||||||
setUniform(KRENGINE_UNIFORM_SHADOWTEXTURE1, 3);
|
setUniform(Uniform::KRENGINE_UNIFORM_SHADOWTEXTURE1, 3);
|
||||||
setUniform(KRENGINE_UNIFORM_SHADOWTEXTURE2, 4);
|
setUniform(Uniform::KRENGINE_UNIFORM_SHADOWTEXTURE2, 4);
|
||||||
setUniform(KRENGINE_UNIFORM_SHADOWTEXTURE3, 5);
|
setUniform(Uniform::KRENGINE_UNIFORM_SHADOWTEXTURE3, 5);
|
||||||
setUniform(KRENGINE_UNIFORM_REFLECTIONCUBETEXTURE, 4);
|
setUniform(Uniform::KRENGINE_UNIFORM_REFLECTIONCUBETEXTURE, 4);
|
||||||
setUniform(KRENGINE_UNIFORM_LIGHTMAPTEXTURE, 5);
|
setUniform(Uniform::KRENGINE_UNIFORM_LIGHTMAPTEXTURE, 5);
|
||||||
setUniform(KRENGINE_UNIFORM_GBUFFER_FRAME, 6);
|
setUniform(Uniform::KRENGINE_UNIFORM_GBUFFER_FRAME, 6);
|
||||||
setUniform(KRENGINE_UNIFORM_GBUFFER_DEPTH, 7); // Texture unit 7 is used for reading the depth buffer in gBuffer pass #2 and in post-processing pass
|
setUniform(Uniform::KRENGINE_UNIFORM_GBUFFER_DEPTH, 7); // Texture unit 7 is used for reading the depth buffer in gBuffer pass #2 and in post-processing pass
|
||||||
setUniform(KRENGINE_UNIFORM_REFLECTIONTEXTURE, 7); // Texture unit 7 is used for the reflection map textures in gBuffer pass #3 and when using forward rendering
|
setUniform(Uniform::KRENGINE_UNIFORM_REFLECTIONTEXTURE, 7); // Texture unit 7 is used for the reflection map textures in gBuffer pass #3 and when using forward rendering
|
||||||
setUniform(KRENGINE_UNIFORM_DEPTH_FRAME, 0);
|
setUniform(Uniform::KRENGINE_UNIFORM_DEPTH_FRAME, 0);
|
||||||
setUniform(KRENGINE_UNIFORM_RENDER_FRAME, 1);
|
setUniform(Uniform::KRENGINE_UNIFORM_RENDER_FRAME, 1);
|
||||||
setUniform(KRENGINE_UNIFORM_VOLUMETRIC_ENVIRONMENT_FRAME, 2);
|
setUniform(Uniform::KRENGINE_UNIFORM_VOLUMETRIC_ENVIRONMENT_FRAME, 2);
|
||||||
|
|
||||||
if(m_pushConstantBuffer) {
|
if(m_pushConstantBuffer) {
|
||||||
vkCmdPushConstants(commandBuffer, m_pushConstantsLayout, VK_SHADER_STAGE_VERTEX_BIT, 0, m_pushConstantBufferSize, m_pushConstantBuffer);
|
vkCmdPushConstants(commandBuffer, m_pushConstantsLayout, VK_SHADER_STAGE_VERTEX_BIT, 0, m_pushConstantBufferSize, m_pushConstantBuffer);
|
||||||
|
|||||||
@@ -212,7 +212,7 @@ public:
|
|||||||
|
|
||||||
bool bind(VkCommandBuffer& commandBuffer, KRCamera &camera, const KRViewport &viewport, const Matrix4 &matModel, const std::vector<KRPointLight *> *point_lights, const std::vector<KRDirectionalLight *> *directional_lights, const std::vector<KRSpotLight *>*spot_lights, const KRNode::RenderPass &renderPass);
|
bool bind(VkCommandBuffer& commandBuffer, KRCamera &camera, const KRViewport &viewport, const Matrix4 &matModel, const std::vector<KRPointLight *> *point_lights, const std::vector<KRDirectionalLight *> *directional_lights, const std::vector<KRSpotLight *>*spot_lights, const KRNode::RenderPass &renderPass);
|
||||||
|
|
||||||
enum {
|
enum class Uniform : uint8_t {
|
||||||
KRENGINE_UNIFORM_MATERIAL_AMBIENT = 0,
|
KRENGINE_UNIFORM_MATERIAL_AMBIENT = 0,
|
||||||
KRENGINE_UNIFORM_MATERIAL_DIFFUSE,
|
KRENGINE_UNIFORM_MATERIAL_DIFFUSE,
|
||||||
KRENGINE_UNIFORM_MATERIAL_SPECULAR,
|
KRENGINE_UNIFORM_MATERIAL_SPECULAR,
|
||||||
@@ -284,6 +284,8 @@ public:
|
|||||||
KRENGINE_NUM_UNIFORMS
|
KRENGINE_NUM_UNIFORMS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const size_t kUniformCount = static_cast<size_t>(Uniform::KRENGINE_NUM_UNIFORMS);
|
||||||
|
|
||||||
enum class ShaderStages : uint8_t
|
enum class ShaderStages : uint8_t
|
||||||
{
|
{
|
||||||
vertex = 0,
|
vertex = 0,
|
||||||
@@ -292,15 +294,17 @@ public:
|
|||||||
compute,
|
compute,
|
||||||
shaderStageCount
|
shaderStageCount
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const size_t kShaderStageCount = static_cast<size_t>(ShaderStages::shaderStageCount);
|
||||||
|
|
||||||
bool hasUniform(int location) const;
|
bool hasUniform(Uniform location) const;
|
||||||
void setUniform(int location, float value);
|
void setUniform(Uniform location, float value);
|
||||||
void setUniform(int location, int value);
|
void setUniform(Uniform location, int value);
|
||||||
void setUniform(int location, const Vector2 &value);
|
void setUniform(Uniform location, const Vector2 &value);
|
||||||
void setUniform(int location, const Vector3 &value);
|
void setUniform(Uniform location, const Vector3 &value);
|
||||||
void setUniform(int location, const Vector4 &value);
|
void setUniform(Uniform location, const Vector4 &value);
|
||||||
void setUniform(int location, const Matrix4 &value);
|
void setUniform(Uniform location, const Matrix4 &value);
|
||||||
void setUniform(int location, const Matrix4* value, const size_t count);
|
void setUniform(Uniform location, const Matrix4* value, const size_t count);
|
||||||
|
|
||||||
VkPipeline& getPipeline();
|
VkPipeline& getPipeline();
|
||||||
|
|
||||||
@@ -309,8 +313,8 @@ private:
|
|||||||
|
|
||||||
struct PushConstantStageInfo
|
struct PushConstantStageInfo
|
||||||
{
|
{
|
||||||
int offset[KRENGINE_NUM_UNIFORMS];
|
int offset[kUniformCount];
|
||||||
__uint8_t size[KRENGINE_NUM_UNIFORMS];
|
__uint8_t size[kUniformCount];
|
||||||
};
|
};
|
||||||
PushConstantStageInfo m_pushConstants[static_cast<size_t>(ShaderStages::shaderStageCount)];
|
PushConstantStageInfo m_pushConstants[static_cast<size_t>(ShaderStages::shaderStageCount)];
|
||||||
|
|
||||||
|
|||||||
@@ -112,11 +112,11 @@ void KRPointLight::render(RenderInfo& ri)
|
|||||||
info.modelFormat = bInsideLight ? ModelFormat::KRENGINE_MODEL_FORMAT_STRIP : ModelFormat::KRENGINE_MODEL_FORMAT_TRIANGLES;
|
info.modelFormat = bInsideLight ? ModelFormat::KRENGINE_MODEL_FORMAT_STRIP : ModelFormat::KRENGINE_MODEL_FORMAT_TRIANGLES;
|
||||||
|
|
||||||
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_COLOR, m_color);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_LIGHT_COLOR, m_color);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_INTENSITY, m_intensity * 0.01f);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_LIGHT_INTENSITY, m_intensity * 0.01f);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_DECAY_START, getDecayStart());
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_LIGHT_DECAY_START, getDecayStart());
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_CUTOFF, KRLIGHT_MIN_INFLUENCE);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_LIGHT_CUTOFF, KRLIGHT_MIN_INFLUENCE);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_POSITION, light_position);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_LIGHT_POSITION, light_position);
|
||||||
pShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, sphereModelMatrix, &this_light, nullptr, nullptr, ri.renderPass);
|
pShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, sphereModelMatrix, &this_light, nullptr, nullptr, ri.renderPass);
|
||||||
|
|
||||||
if(bInsideLight) {
|
if(bInsideLight) {
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ void KRSprite::render(RenderInfo& ri) {
|
|||||||
info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_STRIP;
|
info.modelFormat = ModelFormat::KRENGINE_MODEL_FORMAT_STRIP;
|
||||||
|
|
||||||
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
||||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_MATERIAL_ALPHA, m_spriteAlpha);
|
pShader->setUniform(KRPipeline::Uniform::KRENGINE_UNIFORM_MATERIAL_ALPHA, m_spriteAlpha);
|
||||||
pShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, getModelMatrix(), &ri.point_lights, &ri.directional_lights, &ri.spot_lights, ri.renderPass);
|
pShader->bind(ri.commandBuffer, *ri.camera, ri.viewport, getModelMatrix(), &ri.point_lights, &ri.directional_lights, &ri.spot_lights, ri.renderPass);
|
||||||
|
|
||||||
m_pContext->getTextureManager()->selectTexture(0, m_pSpriteTexture, 0.0f, KRTexture::TEXTURE_USAGE_SPRITE);
|
m_pContext->getTextureManager()->selectTexture(0, m_pSpriteTexture, 0.0f, KRTexture::TEXTURE_USAGE_SPRITE);
|
||||||
|
|||||||
Reference in New Issue
Block a user