mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-05 22:31:08 +00:00
Convert over mesh rendering and fix it up for GL while I'm at it
This commit is contained in:
@@ -21,12 +21,9 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
******************************************************************************/
|
||||
|
||||
in v2f
|
||||
{
|
||||
vec4 secondary;
|
||||
vec4 norm;
|
||||
} IN;
|
||||
|
||||
layout (location = 0) in vec4 secondary;
|
||||
layout (location = 1) in vec4 norm;
|
||||
|
||||
layout (location = 0) out vec4 color_out;
|
||||
|
||||
@@ -36,17 +33,17 @@ void main(void)
|
||||
|
||||
if(type == MESHDISPLAY_SECONDARY)
|
||||
{
|
||||
color_out = vec4(IN.secondary.xyz, 1);
|
||||
color_out = vec4(secondary.xyz, 1);
|
||||
}
|
||||
else if(type == MESHDISPLAY_SECONDARY_ALPHA)
|
||||
{
|
||||
color_out = vec4(IN.secondary.www, 1);
|
||||
color_out = vec4(secondary.www, 1);
|
||||
}
|
||||
else if(type == MESHDISPLAY_FACELIT)
|
||||
{
|
||||
vec3 lightDir = normalize(vec3(0, -0.3f, -1));
|
||||
|
||||
color_out = vec4(Mesh.color.xyz*abs(dot(lightDir, IN.norm.xyz)), 1);
|
||||
color_out = vec4(Mesh.color.xyz*abs(dot(lightDir, norm.xyz)), 1);
|
||||
}
|
||||
else //if(type == MESHDISPLAY_SOLID)
|
||||
{
|
||||
|
||||
@@ -25,17 +25,17 @@
|
||||
layout(triangles, invocations = 1) in;
|
||||
layout(triangle_strip, max_vertices = 3) out;
|
||||
|
||||
in v2f
|
||||
{
|
||||
vec4 secondary;
|
||||
vec4 norm;
|
||||
} IN[];
|
||||
layout (location = 0) in vec4 IN_secondary[3];
|
||||
layout (location = 1) in vec4 IN_norm[3];
|
||||
|
||||
out v2f
|
||||
layout (location = 0) out vec4 OUT_secondary;
|
||||
layout (location = 1) out vec4 OUT_norm;
|
||||
|
||||
in gl_PerVertex
|
||||
{
|
||||
vec4 secondary;
|
||||
vec4 norm;
|
||||
} OUT;
|
||||
vec4 gl_Position;
|
||||
float gl_PointSize;
|
||||
} gl_in[];
|
||||
|
||||
out gl_PerVertex
|
||||
{
|
||||
@@ -52,8 +52,8 @@ void main()
|
||||
for(int i=0; i < 3; i++)
|
||||
{
|
||||
gl_Position = gl_in[i].gl_Position;
|
||||
OUT.secondary = IN[i].secondary;
|
||||
OUT.norm = vec4(faceNormal.xyz, 1);
|
||||
OUT_secondary = IN_secondary[i];
|
||||
OUT_norm = vec4(faceNormal.xyz, 1);
|
||||
EmitVertex();
|
||||
}
|
||||
EndPrimitive();
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
******************************************************************************/
|
||||
|
||||
layout (location = 0) in vec4 position;
|
||||
layout (location = 1) in vec4 secondary;
|
||||
layout (location = 1) in vec4 IN_secondary;
|
||||
|
||||
out gl_PerVertex
|
||||
{
|
||||
@@ -32,11 +32,8 @@ out gl_PerVertex
|
||||
float gl_PointSize;
|
||||
};
|
||||
|
||||
out v2f
|
||||
{
|
||||
vec4 secondary;
|
||||
vec4 norm;
|
||||
} OUT;
|
||||
layout (location = 0) out vec4 OUT_secondary;
|
||||
layout (location = 1) out vec4 norm;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
@@ -62,8 +59,8 @@ void main(void)
|
||||
|
||||
gl_Position = Mesh.mvp * pos;
|
||||
gl_Position.xy += Mesh.pointSpriteSize.xy*0.01f*psprite[VERTEX_ID%4]*gl_Position.w;
|
||||
OUT.secondary = secondary;
|
||||
OUT.norm = vec4(0, 0, 1, 1);
|
||||
OUT_secondary = IN_secondary;
|
||||
norm = vec4(0, 0, 1, 1);
|
||||
|
||||
#ifdef VULKAN
|
||||
// GL->VK conventions
|
||||
|
||||
@@ -317,13 +317,12 @@ void GLReplay::InitDebugData()
|
||||
DebugData.genericProg = CreateShaderProgram(genericvsSource.c_str(), genericfsSource.c_str());
|
||||
DebugData.genericFSProg = CreateShaderProgram(NULL, genericfsSource.c_str());
|
||||
|
||||
string meshvs = GetEmbeddedResource(glsl_mesh_vert);
|
||||
string meshgs = GetEmbeddedResource(glsl_mesh_geom);
|
||||
string meshfs = GetEmbeddedResource(glsl_mesh_frag);
|
||||
meshfs = "#version 420 core\n\n" + GetEmbeddedResource(glsl_debuguniforms_h) + meshfs;
|
||||
GenerateGLSLShader(vs, eShaderGLSL, "", GetEmbeddedResource(spv_mesh_vert), 420);
|
||||
GenerateGLSLShader(fs, eShaderGLSL, "", GetEmbeddedResource(spv_mesh_frag), 420);
|
||||
GenerateGLSLShader(gs, eShaderGLSL, "", GetEmbeddedResource(spv_mesh_geom), 420);
|
||||
|
||||
DebugData.meshProg = CreateShaderProgram(meshvs.c_str(), meshfs.c_str());
|
||||
DebugData.meshgsProg = CreateShaderProgram(meshvs.c_str(), meshfs.c_str(), meshgs.c_str());
|
||||
DebugData.meshProg = CreateShaderProgram(vs, fs);
|
||||
DebugData.meshgsProg = CreateShaderProgram(vs, fs, gs);
|
||||
|
||||
gl.glGenProgramPipelines(1, &DebugData.texDisplayPipe);
|
||||
|
||||
@@ -3570,11 +3569,10 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
|
||||
GLuint prog = DebugData.meshProg;
|
||||
|
||||
GLint colLoc = gl.glGetUniformLocation(prog, "RENDERDOC_GenericFS_Color");
|
||||
GLint mvpLoc = gl.glGetUniformLocation(prog, "ModelViewProj");
|
||||
GLint fmtLoc = gl.glGetUniformLocation(prog, "Mesh_DisplayFormat");
|
||||
GLint sizeLoc = gl.glGetUniformLocation(prog, "PointSpriteSize");
|
||||
GLint homogLoc = gl.glGetUniformLocation(prog, "HomogenousInput");
|
||||
MeshUBOData uboParams = {};
|
||||
MeshUBOData *uboptr = NULL;
|
||||
|
||||
gl.glBindBufferBase(eGL_UNIFORM_BUFFER, 0, DebugData.UBOs[0]);
|
||||
|
||||
gl.glUseProgram(prog);
|
||||
|
||||
@@ -3599,13 +3597,13 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
ModelViewProj = projMat.Mul(camMat.Mul(guessProjInv));
|
||||
}
|
||||
|
||||
gl.glUniformMatrix4fv(mvpLoc, 1, GL_FALSE, ModelViewProj.Data());
|
||||
gl.glUniform1ui(homogLoc, cfg.position.unproject);
|
||||
gl.glUniform2f(sizeLoc, 0.0f, 0.0f);
|
||||
uboParams.mvp = ModelViewProj;
|
||||
uboParams.homogenousInput = cfg.position.unproject;
|
||||
uboParams.pointSpriteSize = Vec2f(0.0f, 0.0f);
|
||||
|
||||
if(!secondaryDraws.empty())
|
||||
{
|
||||
gl.glUniform1ui(fmtLoc, MESHDISPLAY_SOLID);
|
||||
uboParams.displayFormat = MESHDISPLAY_SOLID;
|
||||
|
||||
gl.glPolygonMode(eGL_FRONT_AND_BACK, eGL_LINE);
|
||||
|
||||
@@ -3620,7 +3618,13 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
|
||||
if(fmt.buf != ResourceId())
|
||||
{
|
||||
gl.glUniform4fv(colLoc, 1, &fmt.meshColour.x);
|
||||
uboParams.color =
|
||||
Vec4f(fmt.meshColour.x, fmt.meshColour.y, fmt.meshColour.z, fmt.meshColour.w);
|
||||
|
||||
uboptr = (MeshUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(MeshUBOData),
|
||||
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
|
||||
*uboptr = uboParams;
|
||||
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
|
||||
|
||||
GLuint vb = m_pDriver->GetResourceManager()->GetCurrentResource(fmt.buf).name;
|
||||
gl.glBindVertexBuffer(0, vb, (GLintptr)fmt.offset, fmt.stride);
|
||||
@@ -3761,36 +3765,35 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
// pick program with GS for per-face lighting
|
||||
solidProg = DebugData.meshgsProg;
|
||||
|
||||
ClearGLErrors(gl.GetHookset());
|
||||
gl.glUseProgram(solidProg);
|
||||
GLenum err = gl.glGetError();
|
||||
|
||||
GLint invProjLoc = gl.glGetUniformLocation(solidProg, "InvProj");
|
||||
|
||||
Matrix4f InvProj = projMat.Inverse();
|
||||
|
||||
gl.glUniformMatrix4fv(invProjLoc, 1, GL_FALSE, InvProj.Data());
|
||||
err = eGL_NONE;
|
||||
}
|
||||
|
||||
GLint solidcolLoc = gl.glGetUniformLocation(solidProg, "RENDERDOC_GenericFS_Color");
|
||||
GLint solidmvpLoc = gl.glGetUniformLocation(solidProg, "ModelViewProj");
|
||||
GLint solidfmtLoc = gl.glGetUniformLocation(solidProg, "Mesh_DisplayFormat");
|
||||
GLint solidsizeLoc = gl.glGetUniformLocation(solidProg, "PointSpriteSize");
|
||||
GLint solidhomogLoc = gl.glGetUniformLocation(solidProg, "HomogenousInput");
|
||||
MeshUBOData *soliddata = (MeshUBOData *)gl.glMapBufferRange(
|
||||
eGL_UNIFORM_BUFFER, 0, sizeof(MeshUBOData), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
|
||||
|
||||
gl.glUniformMatrix4fv(solidmvpLoc, 1, GL_FALSE, ModelViewProj.Data());
|
||||
gl.glUniform2f(solidsizeLoc, 0.0f, 0.0f);
|
||||
gl.glUniform1ui(solidhomogLoc, cfg.position.unproject);
|
||||
soliddata->mvp = ModelViewProj;
|
||||
soliddata->pointSpriteSize = Vec2f(0.0f, 0.0f);
|
||||
soliddata->homogenousInput = cfg.position.unproject;
|
||||
|
||||
soliddata->color = Vec4f(0.8f, 0.8f, 0.0f, 1.0f);
|
||||
|
||||
uint32_t OutputDisplayFormat = (uint32_t)cfg.solidShadeMode;
|
||||
if(cfg.solidShadeMode == eShade_Secondary && cfg.second.showAlpha)
|
||||
OutputDisplayFormat = MESHDISPLAY_SECONDARY_ALPHA;
|
||||
soliddata->displayFormat = OutputDisplayFormat;
|
||||
|
||||
if(cfg.solidShadeMode == eShade_Lit)
|
||||
soliddata->invProj = projMat.Inverse();
|
||||
|
||||
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
|
||||
|
||||
if(cfg.second.buf != ResourceId())
|
||||
gl.glEnableVertexAttribArray(1);
|
||||
|
||||
float wireCol[] = {0.8f, 0.8f, 0.0f, 1.0f};
|
||||
gl.glUniform4fv(solidcolLoc, 1, wireCol);
|
||||
|
||||
GLint OutputDisplayFormat = (int)cfg.solidShadeMode;
|
||||
if(cfg.solidShadeMode == eShade_Secondary && cfg.second.showAlpha)
|
||||
OutputDisplayFormat = MESHDISPLAY_SECONDARY_ALPHA;
|
||||
gl.glUniform1ui(solidfmtLoc, OutputDisplayFormat);
|
||||
|
||||
gl.glPolygonMode(eGL_FRONT_AND_BACK, eGL_FILL);
|
||||
|
||||
if(cfg.position.idxByteWidth)
|
||||
@@ -3825,12 +3828,18 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
// wireframe render
|
||||
if(cfg.solidShadeMode == eShade_None || cfg.wireframeDraw || topo == eGL_PATCHES)
|
||||
{
|
||||
gl.glUniform4fv(colLoc, 1, &cfg.position.meshColour.x);
|
||||
uboParams.color = Vec4f(cfg.position.meshColour.x, cfg.position.meshColour.y,
|
||||
cfg.position.meshColour.z, cfg.position.meshColour.w);
|
||||
|
||||
gl.glUniform1ui(fmtLoc, MESHDISPLAY_SOLID);
|
||||
uboParams.displayFormat = MESHDISPLAY_SOLID;
|
||||
|
||||
gl.glPolygonMode(eGL_FRONT_AND_BACK, eGL_LINE);
|
||||
|
||||
uboptr = (MeshUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(MeshUBOData),
|
||||
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
|
||||
*uboptr = uboParams;
|
||||
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
|
||||
|
||||
if(cfg.position.idxByteWidth)
|
||||
{
|
||||
GLenum idxtype = eGL_UNSIGNED_BYTE;
|
||||
@@ -3884,12 +3893,16 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
|
||||
gl.glBindVertexArray(DebugData.triHighlightVAO);
|
||||
|
||||
float wireCol[] = {0.2f, 0.2f, 1.0f, 1.0f};
|
||||
gl.glUniform4fv(colLoc, 1, wireCol);
|
||||
uboParams.color = Vec4f(0.2f, 0.2f, 1.0f, 1.0f);
|
||||
|
||||
Matrix4f mvpMat = projMat.Mul(camMat);
|
||||
|
||||
gl.glUniformMatrix4fv(mvpLoc, 1, GL_FALSE, mvpMat.Data());
|
||||
uboParams.mvp = mvpMat;
|
||||
|
||||
uboptr = (MeshUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(MeshUBOData),
|
||||
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
|
||||
*uboptr = uboParams;
|
||||
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
|
||||
|
||||
// we want this to clip
|
||||
gl.glDepthFunc(eGL_LESS);
|
||||
@@ -3904,16 +3917,26 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
{
|
||||
gl.glBindVertexArray(DebugData.axisVAO);
|
||||
|
||||
Vec4f wireCol(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
gl.glUniform4fv(colLoc, 1, &wireCol.x);
|
||||
uboParams.color = Vec4f(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
uboptr = (MeshUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(MeshUBOData),
|
||||
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
|
||||
*uboptr = uboParams;
|
||||
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
|
||||
|
||||
gl.glDrawArrays(eGL_LINES, 0, 2);
|
||||
|
||||
wireCol = Vec4f(0.0f, 1.0f, 0.0f, 1.0f);
|
||||
gl.glUniform4fv(colLoc, 1, &wireCol.x);
|
||||
uboParams.color = Vec4f(0.0f, 1.0f, 0.0f, 1.0f);
|
||||
uboptr = (MeshUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(MeshUBOData),
|
||||
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
|
||||
*uboptr = uboParams;
|
||||
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
|
||||
gl.glDrawArrays(eGL_LINES, 2, 2);
|
||||
|
||||
wireCol = Vec4f(0.0f, 0.0f, 1.0f, 1.0f);
|
||||
gl.glUniform4fv(colLoc, 1, &wireCol.x);
|
||||
uboParams.color = Vec4f(0.0f, 0.0f, 1.0f, 1.0f);
|
||||
uboptr = (MeshUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(MeshUBOData),
|
||||
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
|
||||
*uboptr = uboParams;
|
||||
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
|
||||
gl.glDrawArrays(eGL_LINES, 4, 2);
|
||||
}
|
||||
|
||||
@@ -3922,10 +3945,13 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
{
|
||||
gl.glBindVertexArray(DebugData.frustumVAO);
|
||||
|
||||
float wireCol[] = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||
gl.glUniform4fv(colLoc, 1, wireCol);
|
||||
uboParams.color = Vec4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
uboParams.mvp = ModelViewProj;
|
||||
|
||||
gl.glUniformMatrix4fv(mvpLoc, 1, GL_FALSE, ModelViewProj.Data());
|
||||
uboptr = (MeshUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(MeshUBOData),
|
||||
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
|
||||
*uboptr = uboParams;
|
||||
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
|
||||
|
||||
gl.glDrawArrays(eGL_LINES, 0, 24);
|
||||
}
|
||||
@@ -4317,9 +4343,9 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
else
|
||||
ModelViewProj = projMat.Mul(camMat);
|
||||
|
||||
gl.glUniform1ui(homogLoc, cfg.position.unproject);
|
||||
uboParams.homogenousInput = cfg.position.unproject;
|
||||
|
||||
gl.glUniformMatrix4fv(mvpLoc, 1, GL_FALSE, ModelViewProj.Data());
|
||||
uboParams.mvp = ModelViewProj;
|
||||
|
||||
gl.glBindVertexArray(DebugData.triHighlightVAO);
|
||||
|
||||
@@ -4327,11 +4353,15 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
// render primitives
|
||||
|
||||
// Draw active primitive (red)
|
||||
Vec4f WireframeColour(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
gl.glUniform4fv(colLoc, 1, &WireframeColour.x);
|
||||
uboParams.color = Vec4f(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
|
||||
if(activePrim.size() >= primSize)
|
||||
{
|
||||
uboptr = (MeshUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(MeshUBOData),
|
||||
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
|
||||
*uboptr = uboParams;
|
||||
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
|
||||
|
||||
gl.glBindBuffer(eGL_ARRAY_BUFFER, DebugData.triHighlightBuffer);
|
||||
gl.glBufferSubData(eGL_ARRAY_BUFFER, 0, sizeof(Vec4f) * primSize, &activePrim[0]);
|
||||
|
||||
@@ -4339,11 +4369,15 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
}
|
||||
|
||||
// Draw adjacent primitives (green)
|
||||
WireframeColour = Vec4f(0.0f, 1.0f, 0.0f, 1.0f);
|
||||
gl.glUniform4fv(colLoc, 1, &WireframeColour.x);
|
||||
uboParams.color = Vec4f(0.0f, 1.0f, 0.0f, 1.0f);
|
||||
|
||||
if(adjacentPrimVertices.size() >= primSize && (adjacentPrimVertices.size() % primSize) == 0)
|
||||
{
|
||||
uboptr = (MeshUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(MeshUBOData),
|
||||
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
|
||||
*uboptr = uboParams;
|
||||
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
|
||||
|
||||
gl.glBindBuffer(eGL_ARRAY_BUFFER, DebugData.triHighlightBuffer);
|
||||
gl.glBufferSubData(eGL_ARRAY_BUFFER, 0, sizeof(Vec4f) * adjacentPrimVertices.size(),
|
||||
&adjacentPrimVertices[0]);
|
||||
@@ -4356,12 +4390,15 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
float scale = 800.0f / float(DebugData.outHeight);
|
||||
float asp = float(DebugData.outWidth) / float(DebugData.outHeight);
|
||||
|
||||
Vec2f SpriteSize = Vec2f(scale / asp, scale);
|
||||
gl.glUniform2fv(sizeLoc, 1, &SpriteSize.x);
|
||||
uboParams.pointSpriteSize = Vec2f(scale / asp, scale);
|
||||
|
||||
// Draw active vertex (blue)
|
||||
WireframeColour = Vec4f(0.0f, 0.0f, 1.0f, 1.0f);
|
||||
gl.glUniform4fv(colLoc, 1, &WireframeColour.x);
|
||||
uboParams.color = Vec4f(0.0f, 0.0f, 1.0f, 1.0f);
|
||||
|
||||
uboptr = (MeshUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(MeshUBOData),
|
||||
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
|
||||
*uboptr = uboParams;
|
||||
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
|
||||
|
||||
FloatVector vertSprite[4] = {
|
||||
activeVertex, activeVertex, activeVertex, activeVertex,
|
||||
@@ -4373,8 +4410,12 @@ void GLReplay::RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryD
|
||||
gl.glDrawArrays(eGL_TRIANGLE_STRIP, 0, 4);
|
||||
|
||||
// Draw inactive vertices (green)
|
||||
WireframeColour = Vec4f(0.0f, 1.0f, 0.0f, 1.0f);
|
||||
gl.glUniform4fv(colLoc, 1, &WireframeColour.x);
|
||||
uboParams.color = Vec4f(0.0f, 1.0f, 0.0f, 1.0f);
|
||||
|
||||
uboptr = (MeshUBOData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(MeshUBOData),
|
||||
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
|
||||
*uboptr = uboParams;
|
||||
gl.glUnmapBuffer(eGL_UNIFORM_BUFFER);
|
||||
|
||||
for(size_t i = 0; i < inactiveVertices.size(); i++)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user