Working on testing code

This commit is contained in:
Brad Davis 2015-02-03 22:13:16 -08:00
parent 77ce737f61
commit 42703d2234

View file

@ -28,50 +28,60 @@
#include <glm/glm.hpp> #include <glm/glm.hpp>
#include <PathUtils.h> #include <PathUtils.h>
using TexturePtr = std::shared_ptr < QOpenGLTexture > ; //#define USE_OGLPLUS
using VertexArrayPtr = std::shared_ptr < QOpenGLVertexArrayObject >; #ifdef USE_OGLPLUS
using ProgramPtr = std::shared_ptr < QOpenGLShaderProgram >; #include <oglplus/all.hpp>
using BufferPtr = std::shared_ptr < QOpenGLBuffer >; #include <oglplus/shapes/plane.hpp>
#include <oglplus/shapes/wrapper.hpp>
using ProgramPtr = std::shared_ptr < oglplus::Program >;
using ShapeWrapperPtr = std::shared_ptr < oglplus::shapes::ShapeWrapper >;
#endif
const char textured_vs[] = R"XXXX(#version 330
const char simple_vs[] = R"XXXX(#version 330
uniform mat4 Projection = mat4(1); uniform mat4 Projection = mat4(1);
uniform mat4 ModelView = mat4(1); uniform mat4 ModelView = mat4(1);
uniform vec2 UvMultiplier = vec2(1);
layout(location = 0) in vec3 Position; layout(location = 0) in vec3 Position;
layout(location = 1) in vec2 TexCoord;
out vec2 vTexCoord;
void main() { void main() {
gl_Position = Projection * ModelView * vec4(Position, 1); gl_Position = Projection * ModelView * vec4(Position, 1);
vTexCoord = TexCoord * UvMultiplier;
} }
)XXXX"; )XXXX";
const char textured_fs[] = R"XXXX(#version 330 const char example_gs[] = R"XXXX(#version 330
layout(triangles) in;
layout(triangle_strip, max_vertices = 3) out;
uniform sampler2D sampler; void main() {
uniform float Alpha = 1.0; for (int i = 0; i < 3; ++i) {
gl_Position = vec4(gl_in[i].gl_Position.xyz / 2.0f, 1.0);
EmitVertex();
}
EndPrimitive();
}
)XXXX";
in vec2 vTexCoord; const char colored_fs[] = R"XXXX(#version 330
out vec4 vFragColor;
uniform vec4 Color = vec4(1, 0, 1, 1);
out vec4 FragColor;
void main() { void main() {
vec4 c = texture(sampler, vTexCoord); FragColor = Color;
c.a = min(Alpha, c.a); }
vFragColor = c; )XXXX";
//vFragColor = vec4(fract(vTexCoord), log(vTexCoord.x), 1.0);
})XXXX";
class QTestWindow : public QWindow { class QTestWindow : public QWindow {
Q_OBJECT Q_OBJECT
QOpenGLContext * m_context; QOpenGLContext * m_context;
#ifdef USE_OGLPLUS
ProgramPtr shader; ProgramPtr shader;
VertexArrayPtr vao; ShapeWrapperPtr plane;
BufferPtr geometry; #endif
QSize _size; QSize _size;
TextRenderer* _textRenderer[4]; TextRenderer* _textRenderer[4];
@ -85,7 +95,6 @@ protected:
void resizeEvent(QResizeEvent * ev) override; void resizeEvent(QResizeEvent * ev) override;
}; };
QTestWindow::QTestWindow() { QTestWindow::QTestWindow() {
setSurfaceType(QSurface::OpenGLSurface); setSurfaceType(QSurface::OpenGLSurface);
@ -127,9 +136,50 @@ QTestWindow::QTestWindow() {
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
_textRenderer[0] = TextRenderer::getInstance(SANS_FONT_FAMILY, 12, false); _textRenderer[0] = TextRenderer::getInstance(SANS_FONT_FAMILY, 12, false);
_textRenderer[1] = TextRenderer::getInstance("Times New Roman", 12, TextRenderer::SHADOW_EFFECT); _textRenderer[1] = TextRenderer::getInstance(SERIF_FONT_FAMILY, 12, false, TextRenderer::SHADOW_EFFECT);
_textRenderer[2] = TextRenderer::getInstance(MONO_FONT_FAMILY, 48, -1, false, TextRenderer::OUTLINE_EFFECT); _textRenderer[2] = TextRenderer::getInstance(MONO_FONT_FAMILY, 48, -1, false, TextRenderer::OUTLINE_EFFECT);
_textRenderer[3] = TextRenderer::getInstance(INCONSOLATA_FONT_FAMILY, 24); _textRenderer[3] = TextRenderer::getInstance(INCONSOLATA_FONT_FAMILY, 24);
#ifdef USE_OGLPLUS
using namespace oglplus;
shader = ProgramPtr(new Program());
// attach the shaders to the program
shader->AttachShader(
VertexShader()
.Source(GLSLSource((const char*)simple_vs))
.Compile()
);
shader->AttachShader(
GeometryShader()
.Source(GLSLSource((const char*)example_gs))
.Compile()
);
shader->AttachShader(
FragmentShader()
.Source(GLSLSource((const char*)colored_fs))
.Compile()
);
shader->Link();
size_t uniformCount = shader->ActiveUniforms().Size();
for (size_t i = 0; i < uniformCount; ++i) {
std::string name = shader->ActiveUniforms().At(i).Name();
int location = shader->ActiveUniforms().At(i).Index();
qDebug() << name.c_str() << " " << location;
}
plane = ShapeWrapperPtr(
new shapes::ShapeWrapper(
{ "Position", "TexCoord" },
shapes::Plane(Vec3f(1, 0, 0), Vec3f(0, 1, 0)),
*shader
)
);
plane->Use();
#endif
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
} }
QTestWindow::~QTestWindow() { QTestWindow::~QTestWindow() {
@ -154,9 +204,16 @@ void QTestWindow::draw() {
glViewport(0, 0, _size.width(), _size.height()); glViewport(0, 0, _size.width(), _size.height());
glClearColor(0.2f, 0.2f, 0.2f, 1); glClearColor(0.2f, 0.2f, 0.2f, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_DEPTH_TEST); //{
glEnable(GL_BLEND); // using namespace oglplus;
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // shader->Use();
// Uniform<Vec4f>(*shader, "Color").Set(Vec4f(1.0f, 0, 0, 1.0f));
// plane->Use();
// plane->Draw();
// NoProgram().Bind();
//}
// m_context->swapBuffers(this); return;
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glLoadIdentity(); glLoadIdentity();
@ -172,15 +229,6 @@ void QTestWindow::draw() {
{ QUAD_OFFSET.x, size.y + QUAD_OFFSET.y }, { QUAD_OFFSET.x, size.y + QUAD_OFFSET.y },
}; };
{
glColor3f(0.9, 0.9, 0.9);
glBegin(GL_LINES);
glVertex2f(0, size.y);
glVertex2f(_size.width(), size.y);
glVertex2f(size.x, 0);
glVertex2f(size.x, _size.height());
glEnd();
}
QString str = QString::fromWCharArray(EXAMPLE_TEXT); QString str = QString::fromWCharArray(EXAMPLE_TEXT);
for (int i = 0; i < 4; ++i) { for (int i = 0; i < 4; ++i) {
glm::vec2 bounds = _textRenderer[i]->computeExtent(str); glm::vec2 bounds = _textRenderer[i]->computeExtent(str);