make rendering code more reusable, update testbed
This commit is contained in:
@ -19,15 +19,24 @@
|
||||
#ifndef DRAW_GL4_H
|
||||
#define DRAW_GL4_H
|
||||
|
||||
#include <testbed/framework/draw.h>
|
||||
|
||||
#include <glad_4/glad.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <bounce/common/math/transform.h>
|
||||
#include <bounce/common/math/mat44.h>
|
||||
#include <bounce/common/draw.h>
|
||||
|
||||
#define BUFFER_OFFSET(i) ((char*)NULL + (i))
|
||||
|
||||
extern bool g_glDrawPoints;
|
||||
extern bool g_glDrawLines;
|
||||
extern bool g_glDrawTriangles;
|
||||
|
||||
extern b3Mat44 g_glViewMatrix;
|
||||
extern b3Mat44 g_glProjectionMatrix;
|
||||
|
||||
static void AssertGL()
|
||||
{
|
||||
GLenum errorCode = glGetError();
|
||||
@ -203,7 +212,7 @@ struct DrawPoints
|
||||
return;
|
||||
}
|
||||
|
||||
if ((g_drawFlags & DrawFlags::e_pointsFlag) == 0)
|
||||
if (!g_glDrawPoints)
|
||||
{
|
||||
m_count = 0;
|
||||
return;
|
||||
@ -211,8 +220,8 @@ struct DrawPoints
|
||||
|
||||
glUseProgram(m_programId);
|
||||
|
||||
b3Mat44 m1 = g_camera->BuildViewMatrix();
|
||||
b3Mat44 m2 = g_camera->BuildProjectionMatrix();
|
||||
b3Mat44 m1 = g_glViewMatrix;
|
||||
b3Mat44 m2 = g_glProjectionMatrix;
|
||||
b3Mat44 m = m2 * m1;
|
||||
|
||||
glUniformMatrix4fv(m_projectionUniform, 1, GL_FALSE, &m.x.x);
|
||||
@ -340,7 +349,7 @@ struct DrawLines
|
||||
return;
|
||||
}
|
||||
|
||||
if ((g_drawFlags & DrawFlags::e_linesFlag) == 0)
|
||||
if (!g_glDrawLines)
|
||||
{
|
||||
m_count = 0;
|
||||
return;
|
||||
@ -348,8 +357,8 @@ struct DrawLines
|
||||
|
||||
glUseProgram(m_programId);
|
||||
|
||||
b3Mat44 m1 = g_camera->BuildViewMatrix();
|
||||
b3Mat44 m2 = g_camera->BuildProjectionMatrix();
|
||||
b3Mat44 m1 = g_glViewMatrix;
|
||||
b3Mat44 m2 = g_glProjectionMatrix;
|
||||
b3Mat44 m = m2 * m1;
|
||||
glUniformMatrix4fv(m_projectionUniform, 1, GL_FALSE, &m.x.x);
|
||||
|
||||
@ -484,7 +493,7 @@ struct DrawTriangles
|
||||
return;
|
||||
}
|
||||
|
||||
if ((g_drawFlags & DrawFlags::e_trianglesFlag) == 0)
|
||||
if (!g_glDrawTriangles)
|
||||
{
|
||||
m_count = 0;
|
||||
return;
|
||||
@ -492,8 +501,8 @@ struct DrawTriangles
|
||||
|
||||
glUseProgram(m_programId);
|
||||
|
||||
b3Mat44 m1 = g_camera->BuildViewMatrix();
|
||||
b3Mat44 m2 = g_camera->BuildProjectionMatrix();
|
||||
b3Mat44 m1 = g_glViewMatrix;
|
||||
b3Mat44 m2 = g_glProjectionMatrix;
|
||||
b3Mat44 m = m2 * m1;
|
||||
|
||||
glUniformMatrix4fv(m_projectionUniform, 1, GL_FALSE, &m.x.x);
|
||||
@ -663,19 +672,19 @@ struct DrawWire
|
||||
|
||||
void DrawSphere(float32 radius, const b3Color& c, const b3Transform& xf)
|
||||
{
|
||||
if ((g_drawFlags & DrawFlags::e_linesFlag) == 0)
|
||||
if (!g_glDrawLines)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
glUseProgram(m_programId);
|
||||
|
||||
b3Mat44 m1 = MakeMat44(xf);
|
||||
b3Mat44 m1 = b3TransformMat44(xf);
|
||||
m1.x = radius * m1.x;
|
||||
m1.y = radius * m1.y;
|
||||
m1.z = radius * m1.z;
|
||||
b3Mat44 m2 = g_camera->BuildViewMatrix();
|
||||
b3Mat44 m3 = g_camera->BuildProjectionMatrix();
|
||||
b3Mat44 m2 = g_glViewMatrix;
|
||||
b3Mat44 m3 = g_glProjectionMatrix;
|
||||
b3Mat44 m = m3 * m2 * m1;
|
||||
|
||||
glUniformMatrix4fv(m_projectionUniform, 1, GL_FALSE, &m.x.x);
|
||||
@ -956,20 +965,20 @@ struct DrawSolid
|
||||
|
||||
void DrawCylinder(float32 radius, float32 height, const b3Color& c, const b3Transform& xf)
|
||||
{
|
||||
if ((g_drawFlags & DrawFlags::e_trianglesFlag) == 0)
|
||||
if (!g_glDrawTriangles)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
glUseProgram(m_programId);
|
||||
|
||||
b3Mat44 m1 = MakeMat44(xf);
|
||||
b3Mat44 m1 = b3TransformMat44(xf);
|
||||
m1.x = radius * m1.x;
|
||||
m1.y = height * m1.y;
|
||||
m1.z = radius * m1.z;
|
||||
|
||||
b3Mat44 m2 = g_camera->BuildViewMatrix();
|
||||
b3Mat44 m3 = g_camera->BuildProjectionMatrix();
|
||||
b3Mat44 m2 = g_glViewMatrix;
|
||||
b3Mat44 m3 = g_glProjectionMatrix;
|
||||
b3Mat44 m = m3 * m2 * m1;
|
||||
|
||||
glUniform4fv(m_colorUniform, 1, &c.r);
|
||||
@ -995,20 +1004,20 @@ struct DrawSolid
|
||||
|
||||
void DrawSphere(float32 radius, const b3Color& c, const b3Transform& xf)
|
||||
{
|
||||
if ((g_drawFlags & DrawFlags::e_trianglesFlag) == 0)
|
||||
if (!g_glDrawTriangles)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
glUseProgram(m_programId);
|
||||
|
||||
b3Mat44 m1 = MakeMat44(xf);
|
||||
b3Mat44 m1 = b3TransformMat44(xf);
|
||||
m1.x = radius * m1.x;
|
||||
m1.y = radius * m1.y;
|
||||
m1.z = radius * m1.z;
|
||||
|
||||
b3Mat44 m2 = g_camera->BuildViewMatrix();
|
||||
b3Mat44 m3 = g_camera->BuildProjectionMatrix();
|
||||
b3Mat44 m2 = g_glViewMatrix;
|
||||
b3Mat44 m3 = g_glProjectionMatrix;
|
||||
b3Mat44 m = m3 * m2 * m1;
|
||||
|
||||
glUniform4fv(m_colorUniform, 1, &c.r);
|
||||
|
Reference in New Issue
Block a user