mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-12 16:21:04 +02:00
Specular reflections now sample from the texture color.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
|
||||
This file has been generated with the Type Info Generator v1.1 (c) 2004 id Software
|
||||
|
||||
1185 constants
|
||||
1186 constants
|
||||
133 enums
|
||||
579 classes/structs/unions
|
||||
38 templates
|
||||
@@ -381,6 +381,7 @@ static constantInfo_t constantInfo[] = {
|
||||
{ "int", "GEOMETRY_FLAG_NONE", "0" },
|
||||
{ "int", "GEOMETRY_FLAG_SKELETAL", "1" },
|
||||
{ "int", "GEOMETRY_FLAG_UNLIT", "2" },
|
||||
{ "int", "GEOMETRY_FLAG_GLASS", "4" },
|
||||
{ "static const uint32_t", "GL_RAYTRACING_MAX_LIGHTS", "256" },
|
||||
{ "static const int", "GL_RAYTRACING_LIGHT_TYPE_POINT", "0" },
|
||||
{ "static const int", "GL_RAYTRACING_LIGHT_TYPE_RECT", "1" },
|
||||
@@ -1666,6 +1667,7 @@ static enumValueInfo_t GeometryFlag_t_typeInfo[] = {
|
||||
{ "GEOMETRY_FLAG_NONE", 0 },
|
||||
{ "GEOMETRY_FLAG_SKELETAL", 1 },
|
||||
{ "GEOMETRY_FLAG_UNLIT", 2 },
|
||||
{ "GEOMETRY_FLAG_GLASS", 4 },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
<LocalDebuggerCommandArguments>+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 </LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerWorkingDirectory>D:\projects\Doom3</LocalDebuggerWorkingDirectory>
|
||||
<LocalDebuggerCommandArgumentsHistory>+set r_fullscreen 1 +set r_mode 9 +set sv_pure 0 +set fs_game e3|+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0|+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 +set fs_game e3|+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 |+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 |</LocalDebuggerCommandArgumentsHistory>
|
||||
<LocalDebuggerCommandArgumentsHistory>+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0|+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 +set fs_game e3|+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 |+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 +set fs_game e3|+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 |</LocalDebuggerCommandArgumentsHistory>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Q4 Debug|x64'">
|
||||
<LocalDebuggerCommand>D:\projects\Doom3\Quake4.exe</LocalDebuggerCommand>
|
||||
|
||||
@@ -5037,6 +5037,7 @@ float3 EstimateRayTracedSpecularReflection(
|
||||
|
||||
float3 reflectedRadiance = 0.0;
|
||||
float distanceFade = 1.0;
|
||||
float3 reflectedSurfaceAverageColor = 1.0;
|
||||
|
||||
if (!hit)
|
||||
{
|
||||
@@ -5049,6 +5050,7 @@ float3 EstimateRayTracedSpecularReflection(
|
||||
{
|
||||
distanceFade = ComputeSpecularReflectionDistanceFade(hitT, reflectionMaxT);
|
||||
float3 rayHitPos = reflectionOrigin + R * hitT;
|
||||
reflectedSurfaceAverageColor = GetMeshAverageColor(meshIndex);
|
||||
|
||||
uint2 hitPixel = pixel;
|
||||
float3 hitPos = rayHitPos;
|
||||
@@ -5094,8 +5096,8 @@ float3 EstimateRayTracedSpecularReflection(
|
||||
}
|
||||
}
|
||||
|
||||
reflectedRadiance *= reflectedSurfaceAverageColor;
|
||||
reflectedRadiance = CompressEmissiveRadiance(reflectedRadiance, hasSpecularMap ? 5.0 : 3.5);
|
||||
reflectedRadiance *= hit ? GetMeshAverageColor(meshIndex) : 1.0;
|
||||
|
||||
float cavityFade = lerp(0.42, 1.0, saturate(cavity));
|
||||
float reflectionStrength = hasSpecularMap
|
||||
|
||||
@@ -2184,15 +2184,7 @@ static inline bool QD3D12_CurrentDrawUsesAlphaBlend()
|
||||
|
||||
static inline uint32_t QD3D12_CurrentEffectiveRayMaterialFlags()
|
||||
{
|
||||
uint32_t flags = QD3D12_CurrentRayMaterialFlags();
|
||||
|
||||
// Alpha-blended fixed-function surfaces are visually transparent. Mirror that
|
||||
// into the DXR material bits automatically so callers do not also have to tag
|
||||
// the same draw as glass just to make shadow/GI rays continue through it.
|
||||
if (QD3D12_CurrentDrawUsesAlphaBlend())
|
||||
flags |= GL_RAYTRACING_MATERIAL_FLAG_GLASS;
|
||||
|
||||
return QD3D12_ClampRayMaterialFlags(flags);
|
||||
return QD3D12_CurrentRayMaterialFlags();
|
||||
}
|
||||
|
||||
static inline float QD3D12_CurrentEffectiveGeometryFlag()
|
||||
@@ -2203,6 +2195,12 @@ static inline float QD3D12_CurrentEffectiveGeometryFlag()
|
||||
return (float)bits;
|
||||
}
|
||||
|
||||
static inline bool QD3D12_GeometryFlagHasGlass(float geometryFlag)
|
||||
{
|
||||
const uint32_t bits = (uint32_t)max(0.0f, floorf(geometryFlag + 0.5f));
|
||||
return (bits & QD3D12_GEOMETRY_FLAG_GLASS_BIT) != 0u;
|
||||
}
|
||||
|
||||
static inline float QD3D12_CurrentEffectiveMaterialType()
|
||||
{
|
||||
if (QD3D12_RayMaterialFlagsHaveGlass(QD3D12_CurrentEffectiveRayMaterialFlags()) &&
|
||||
@@ -9401,15 +9399,17 @@ static D3D12_GRAPHICS_PIPELINE_STATE_DESC BuildPSODesc(
|
||||
d.RasterizerState.MultisampleEnable = (d.SampleDesc.Count > 1) ? TRUE : FALSE;
|
||||
|
||||
const bool alphaBlended = QD3D12_PipelineUsesAlphaBlend(mode);
|
||||
const bool glassGBuffer = alphaBlended && QD3D12_GeometryFlagHasGlass(key.geometryFlag);
|
||||
|
||||
d.BlendState.RenderTarget[0].RenderTargetWriteMask = key.colorWriteMask;
|
||||
if (!nativeColorOnly)
|
||||
{
|
||||
d.BlendState.RenderTarget[1].RenderTargetWriteMask = (key.colorWriteMask && !alphaBlended) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0;
|
||||
d.BlendState.RenderTarget[2].RenderTargetWriteMask = (key.colorWriteMask && !alphaBlended) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0;
|
||||
d.BlendState.RenderTarget[3].RenderTargetWriteMask = (key.colorWriteMask && !alphaBlended) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0;
|
||||
d.BlendState.RenderTarget[4].RenderTargetWriteMask = (key.colorWriteMask && !alphaBlended) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0;
|
||||
d.BlendState.RenderTarget[5].RenderTargetWriteMask = (key.colorWriteMask && !alphaBlended) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0;
|
||||
const UINT8 gbufferWriteMask = (key.colorWriteMask && (!alphaBlended || glassGBuffer)) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0;
|
||||
d.BlendState.RenderTarget[1].RenderTargetWriteMask = gbufferWriteMask;
|
||||
d.BlendState.RenderTarget[2].RenderTargetWriteMask = gbufferWriteMask;
|
||||
d.BlendState.RenderTarget[3].RenderTargetWriteMask = gbufferWriteMask;
|
||||
d.BlendState.RenderTarget[4].RenderTargetWriteMask = gbufferWriteMask;
|
||||
d.BlendState.RenderTarget[5].RenderTargetWriteMask = gbufferWriteMask;
|
||||
}
|
||||
|
||||
d.BlendState.AlphaToCoverageEnable = FALSE;
|
||||
@@ -9714,6 +9714,7 @@ static D3D12_GRAPHICS_PIPELINE_STATE_DESC BuildARBPSODesc(
|
||||
d.RasterizerState.MultisampleEnable = (d.SampleDesc.Count > 1) ? TRUE : FALSE;
|
||||
|
||||
const bool alphaBlended = QD3D12_PipelineUsesAlphaBlend(key.pipeline);
|
||||
const bool glassGBuffer = alphaBlended && QD3D12_GeometryFlagHasGlass(key.geometryFlag);
|
||||
|
||||
d.BlendState.AlphaToCoverageEnable = FALSE;
|
||||
d.BlendState.IndependentBlendEnable = nativeColorOnly ? FALSE : TRUE;
|
||||
@@ -9730,7 +9731,7 @@ static D3D12_GRAPHICS_PIPELINE_STATE_DESC BuildARBPSODesc(
|
||||
rt.DestBlendAlpha = D3D12_BLEND_ZERO;
|
||||
rt.BlendOpAlpha = D3D12_BLEND_OP_ADD;
|
||||
rt.LogicOp = D3D12_LOGIC_OP_NOOP;
|
||||
rt.RenderTargetWriteMask = (i == 0) ? key.colorWriteMask : 0;
|
||||
rt.RenderTargetWriteMask = (i == 0) ? key.colorWriteMask : ((!nativeColorOnly && glassGBuffer) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0);
|
||||
}
|
||||
|
||||
if (alphaBlended)
|
||||
|
||||
@@ -1569,8 +1569,9 @@ void APIENTRY glGetQueryObjectiv(GLuint id, GLenum pname, GLint* params);
|
||||
enum GeometryFlag_t
|
||||
{
|
||||
GEOMETRY_FLAG_NONE = 0,
|
||||
GEOMETRY_FLAG_SKELETAL,
|
||||
GEOMETRY_FLAG_UNLIT
|
||||
GEOMETRY_FLAG_SKELETAL = 1,
|
||||
GEOMETRY_FLAG_UNLIT = 2,
|
||||
GEOMETRY_FLAG_GLASS = 4
|
||||
};
|
||||
|
||||
void APIENTRY glGeometryFlagf(GLfloat flag);
|
||||
|
||||
@@ -859,6 +859,18 @@ void RB_STD_T_RenderShaderPasses( const drawSurf_t *surf ) {
|
||||
idDrawVert *ac = RB_BindAmbientBuffer( tri );
|
||||
glVertexPointer( 3, GL_FLOAT, sizeof( idDrawVert ), ac->xyz.ToFloatPtr() );
|
||||
glTexCoordPointer( 2, GL_FLOAT, sizeof( idDrawVert ), reinterpret_cast<void *>(&ac->st) );
|
||||
glNormalPointer( GL_FLOAT, sizeof( idDrawVert ), ac->normal.ToFloatPtr() );
|
||||
glTangentPointer( GL_FLOAT, sizeof( idDrawVert ), ac->tangents[0].ToFloatPtr() );
|
||||
glBinormalPointer( GL_FLOAT, sizeof( idDrawVert ), ac->tangents[1].ToFloatPtr() );
|
||||
|
||||
glEnableClientState( GL_NORMAL_ARRAY );
|
||||
glEnableClientState( GL_TANGENT_ARRAY_QD3D12 );
|
||||
glEnableClientState( GL_BINORMAL_ARRAY_QD3D12 );
|
||||
|
||||
const bool glassMaterial = shader->GetSurfaceType() == SURFTYPE_GLASS;
|
||||
const float baseGeometryFlag = surf->geo->isSkeletal ? (float)GEOMETRY_FLAG_SKELETAL : (float)GEOMETRY_FLAG_NONE;
|
||||
glGlassMaterialQD3D12( glassMaterial ? GL_TRUE : GL_FALSE );
|
||||
glGeometryFlagf( glassMaterial ? ( baseGeometryFlag + (float)GEOMETRY_FLAG_GLASS ) : baseGeometryFlag );
|
||||
|
||||
for ( stage = 0; stage < shader->GetNumStages() ; stage++ ) {
|
||||
pStage = shader->GetStage(stage);
|
||||
@@ -1062,6 +1074,12 @@ void RB_STD_T_RenderShaderPasses( const drawSurf_t *surf ) {
|
||||
if ( surf->space->weaponDepthHack || surf->space->modelDepthHack != 0.0f ) {
|
||||
RB_LeaveDepthHack();
|
||||
}
|
||||
|
||||
glGlassMaterialQD3D12( GL_FALSE );
|
||||
glGeometryFlagf( GEOMETRY_FLAG_NONE );
|
||||
glDisableClientState( GL_NORMAL_ARRAY );
|
||||
glDisableClientState( GL_TANGENT_ARRAY_QD3D12 );
|
||||
glDisableClientState( GL_BINORMAL_ARRAY_QD3D12 );
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -6037,8 +6037,6 @@ void CXYWnd::XY_Draw() {
|
||||
if( m_precisionCrosshairMode != PRECISION_CROSSHAIR_NONE )
|
||||
DrawPrecisionCrosshair();
|
||||
|
||||
glFlush();
|
||||
|
||||
// QE_CheckOpenGLForErrors();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user