mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-14 08:30:35 +00:00
Failed attempt at multiview
This commit is contained in:
parent
578f7cfbcd
commit
f8c1f49e6f
10 changed files with 38 additions and 18 deletions
|
@ -86,7 +86,14 @@ void I_StartTic ()
|
|||
}
|
||||
|
||||
void TBXR_FrameSetup();
|
||||
void TBXR_prepareEyeBuffer(int);
|
||||
bool TBXR_IsFrameSetup();
|
||||
void I_StartFrame ()
|
||||
{
|
||||
if (TBXR_IsFrameSetup())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
TBXR_FrameSetup();
|
||||
}
|
||||
|
|
|
@ -112,11 +112,12 @@ void FGLRenderer::ClearTonemapPalette()
|
|||
void FGLRenderer::Flush()
|
||||
{
|
||||
auto vrmode = VRMode::GetVRMode(true);
|
||||
if (vrmode->mEyeCount == 1)
|
||||
/* if (vrmode->mEyeCount == 1)
|
||||
{
|
||||
CopyToBackbuffer(nullptr, true);
|
||||
}
|
||||
else
|
||||
*/
|
||||
{
|
||||
// Render 2D to eye textures
|
||||
int eyeCount = vrmode->mEyeCount;
|
||||
|
|
|
@ -226,7 +226,7 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char *
|
|||
|
||||
// This must match the HWViewpointUniforms struct
|
||||
layout(std140) uniform ViewpointUBO {
|
||||
mat4 ProjectionMatrix;
|
||||
mat4 ProjectionMatrix[NUM_VIEWS];
|
||||
mat4 ViewMatrix;
|
||||
mat4 NormalViewMatrix;
|
||||
|
||||
|
@ -400,7 +400,7 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char *
|
|||
if (!lightbuffertype)
|
||||
{
|
||||
#ifdef __MOBILE__
|
||||
vp_comb.Format("#version 310 es\n#define NO_CLIPDISTANCE_SUPPORT\n#define NUM_UBO_LIGHTS %d\n#define NUM_UBO_BONES %d\n", lightbuffersize, screen->mBones->GetBlockSize());
|
||||
vp_comb.Format("#version 310 es\n#define NO_CLIPDISTANCE_SUPPORT\n#define NUM_UBO_LIGHTS %d\n#define NUM_UBO_BONES %d\n#define NUM_VIEWS 2\n", lightbuffersize, screen->mBones->GetBlockSize());
|
||||
#else
|
||||
vp_comb.Format("#version 330 core\n#define NUM_UBO_LIGHTS %d\n#define NUM_UBO_BONES %d\n", lightbuffersize, screen->mBones->GetBlockSize());
|
||||
#endif
|
||||
|
@ -421,6 +421,12 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char *
|
|||
}
|
||||
|
||||
FString fp_comb = vp_comb;
|
||||
|
||||
#ifdef __MOBILE__
|
||||
vp_comb << "#extension GL_OVR_multiview2 : enable\n"
|
||||
"layout(num_views=NUM_VIEWS) in;\n";
|
||||
#endif
|
||||
|
||||
vp_comb << defines << i_data.GetChars();
|
||||
fp_comb << "$placeholder$\n" << defines << i_data.GetChars();
|
||||
|
||||
|
|
|
@ -386,15 +386,15 @@ void FGLRenderer::PresentOpenXR()
|
|||
return;
|
||||
}
|
||||
|
||||
for (int eye = 0; eye < 2; ++eye)
|
||||
//for (int eye = 0; eye < 2; ++eye)
|
||||
{
|
||||
TBXR_prepareEyeBuffer(eye);
|
||||
TBXR_prepareEyeBuffer(0);
|
||||
|
||||
ClearBorders();
|
||||
mBuffers->BindEyeTexture(eye, 0);
|
||||
mBuffers->BindEyeTexture(0, 0);
|
||||
DrawPresentTexture(screen->mOutputLetterbox, true);
|
||||
|
||||
TBXR_finishEyeBuffer(eye);
|
||||
TBXR_finishEyeBuffer(0);
|
||||
}
|
||||
|
||||
TBXR_submitFrame();
|
||||
|
|
|
@ -100,17 +100,20 @@ void HWViewpointBuffer::Set2D(F2DDrawer *drawer, FRenderState &di, int width, in
|
|||
|
||||
if (isDrawingFullscreen && isIn2D) //fullscreen 2D
|
||||
{
|
||||
matrices.mProjectionMatrix.ortho(0, (float) width, (float) height, 0, -1.0f, 1.0f);
|
||||
matrices.mProjectionMatrixLeft.ortho(0, (float) width, (float) height, 0, -1.0f, 1.0f);
|
||||
matrices.mProjectionMatrixRight.ortho(0, (float) width, (float) height, 0, -1.0f, 1.0f);
|
||||
}
|
||||
else if (isIn2D) // HUD
|
||||
{
|
||||
auto vrmode = VRMode::GetVRMode(true);
|
||||
matrices.mProjectionMatrix = vrmode->mEyes[di.GetEye()].GetHUDProjection(width, height);
|
||||
matrices.mProjectionMatrixLeft = vrmode->mEyes[0].GetHUDProjection(width, height);
|
||||
matrices.mProjectionMatrixRight = vrmode->mEyes[1].GetHUDProjection(width, height);
|
||||
}
|
||||
else //Player Sprite
|
||||
{
|
||||
auto vrmode = VRMode::GetVRMode(true);
|
||||
matrices.mProjectionMatrix = vrmode->mEyes[di.GetEye()].GetPlayerSpriteProjection(width, height);
|
||||
matrices.mProjectionMatrixLeft = vrmode->mEyes[0].GetPlayerSpriteProjection(width, height);
|
||||
matrices.mProjectionMatrixRight = vrmode->mEyes[1].GetPlayerSpriteProjection(width, height);
|
||||
}
|
||||
matrices.CalcDependencies();
|
||||
SetViewpoint(di, &matrices);
|
||||
|
|
|
@ -15,7 +15,8 @@ enum class ELightBlendMode : uint8_t
|
|||
|
||||
struct HWViewpointUniforms
|
||||
{
|
||||
VSMatrix mProjectionMatrix;
|
||||
VSMatrix mProjectionMatrixLeft;
|
||||
VSMatrix mProjectionMatrixRight;
|
||||
VSMatrix mViewMatrix;
|
||||
VSMatrix mNormalViewMatrix;
|
||||
FVector4 mCameraPos;
|
||||
|
|
|
@ -171,7 +171,7 @@ float getHmdAdjustedHeightInMapUnit()
|
|||
|
||||
#define isqrt2 0.7071067812f
|
||||
static VRMode vrmi_mono = { 1, 1.f, 1.f, 1.f,{ { 0.f, 1.f },{ 0.f, 0.f } } };
|
||||
static VRMode vrmi_stereo = { 2, 1.f, 1.f, 1.f,{ { -.5f, 1.f },{ .5f, 1.f } } };
|
||||
static VRMode vrmi_stereo = { 1, 1.f, 1.f, 1.f,{ { -.5f, 1.f },{ .5f, 1.f } } };
|
||||
static VRMode vrmi_sbsfull = { 2, .5f, 1.f, 2.f,{ { -.5f, .5f },{ .5f, .5f } } };
|
||||
static VRMode vrmi_sbssquished = { 2, .5f, 1.f, 1.f,{ { -.5f, 1.f },{ .5f, 1.f } } };
|
||||
static VRMode vrmi_lefteye = { 1, 1.f, 1.f, 1.f, { { -.5f, 1.f },{ 0.f, 0.f } } };
|
||||
|
|
|
@ -164,7 +164,8 @@ void RenderViewpoint(FRenderViewpoint& mainvp, IntRect* bounds, float fov, float
|
|||
di->Viewpoint.FieldOfView = FAngle::fromDeg(fov); // Set the real FOV for the current scene (it's not necessarily the same as the global setting in r_viewpoint)
|
||||
|
||||
// Stereo mode specific perspective projection
|
||||
di->VPUniforms.mProjectionMatrix = eye.GetProjection(fov, ratio, fovratio);
|
||||
di->VPUniforms.mProjectionMatrixLeft = vrmode->mEyes[0].GetProjection(fov, ratio, fovratio);
|
||||
di->VPUniforms.mProjectionMatrixRight = vrmode->mEyes[1].GetProjection(fov, ratio, fovratio);
|
||||
|
||||
|
||||
// Stereo mode specific viewpoint adjustment
|
||||
|
|
|
@ -138,7 +138,8 @@ void HWDrawInfo::StartScene(FRenderViewpoint& parentvp, HWViewpointUniforms* uni
|
|||
}
|
||||
else
|
||||
{
|
||||
VPUniforms.mProjectionMatrix.loadIdentity();
|
||||
VPUniforms.mProjectionMatrixLeft.loadIdentity();
|
||||
VPUniforms.mProjectionMatrixRight.loadIdentity();
|
||||
VPUniforms.mViewMatrix.loadIdentity();
|
||||
VPUniforms.mNormalViewMatrix.loadIdentity();
|
||||
//VPUniforms.mViewHeight = viewheight;
|
||||
|
@ -732,10 +733,10 @@ void HWDrawInfo::DrawScene(int drawmode, bool portal)
|
|||
|
||||
RenderScene(RenderState);
|
||||
|
||||
if (applySSAO && RenderState.GetPassType() == GBUFFER_PASS)
|
||||
if (false)//applySSAO && RenderState.GetPassType() == GBUFFER_PASS)
|
||||
{
|
||||
screen->AmbientOccludeScene(VPUniforms.mProjectionMatrix.get()[5]);
|
||||
screen->mViewpoints->Bind(RenderState, vpIndex);
|
||||
//screen->AmbientOccludeScene(VPUniforms.mProjectionMatrix[0].get()[5]);
|
||||
//screen->mViewpoints->Bind(RenderState, vpIndex);
|
||||
}
|
||||
|
||||
// Handle all portals after rendering the opaque objects but before
|
||||
|
|
|
@ -109,7 +109,7 @@ void main()
|
|||
vTexCoord = TextureMatrix * vec4(parmTexCoord, 0.0, 1.0);
|
||||
#endif
|
||||
|
||||
gl_Position = ProjectionMatrix * eyeCoordPos;
|
||||
gl_Position = ProjectionMatrix[gl_ViewID_OVR] * eyeCoordPos;
|
||||
|
||||
#ifdef VULKAN_COORDINATE_SYSTEM
|
||||
gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0;
|
||||
|
|
Loading…
Reference in a new issue