summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Jung <flo@windfisch.org>2015-01-22 23:25:42 +0100
committerFlorian Jung <flo@windfisch.org>2015-01-22 23:25:42 +0100
commit5e85e3a9fcd24cf9b6eccd80bf3d8cc24c38b63a (patch)
tree5de319342404cb59e63a70602f53addbefcf3f0b
parenta270d81e08bd8a960a9690e46e13f9385a9ffcfe (diff)
framebuffer
-rw-r--r--client2.cpp66
1 files changed, 50 insertions, 16 deletions
diff --git a/client2.cpp b/client2.cpp
index f8df74f..b2c61d9 100644
--- a/client2.cpp
+++ b/client2.cpp
@@ -25,10 +25,13 @@ using namespace cv;
#define PX_PER_DEG_WINDOWSIZE 3
+#define PX_PER_DEG_CANVAS 16
#define CANVAS_XDEG 450
#define CANVAS_YDEG 120
-#define CANVAS_WIDTH CANVAS_XDEG*PX_PER_DEG_WINDOWSIZE
-#define CANVAS_HEIGHT CANVAS_YDEG*PX_PER_DEG_WINDOWSIZE
+#define CANVAS_WIDTH CANVAS_XDEG*PX_PER_DEG_CANVAS
+#define CANVAS_HEIGHT CANVAS_YDEG*PX_PER_DEG_CANVAS
+#define SCREEN_WIDTH CANVAS_XDEG*PX_PER_DEG_WINDOWSIZE
+#define SCREEN_HEIGHT CANVAS_YDEG*PX_PER_DEG_WINDOWSIZE
@@ -53,6 +56,18 @@ const char* justDrawASpriteFragmentSource =
" outColor = texture(texVideo, Texcoord);\n"
"}\n";
+const char* justDrawASpriteFragmentSourceGray =
+ "#version 150\n"
+ "uniform sampler2D texVideo;\n"
+ "in vec2 Texcoord;\n"
+ "out vec4 outColor;\n"
+ "void main()\n"
+ "{\n"
+ " float gray = (texture(texVideo, Texcoord).r+ texture(texVideo, Texcoord).g + texture(texVideo, Texcoord).b)/3.;\n"
+ " if (Texcoord.x < 0.5) gray=1.0-gray;\n"
+ " outColor = vec4(gray,gray,gray,1.0);\n"
+ "}\n";
+
float vertices[] = {
-1.f, 1.f, 0.0f,0.0f, // Vertex 1 (X, Y)
@@ -64,6 +79,18 @@ float vertices[] = {
-1.f, 1.f, 0.0f,0.0f // Vertex 1 (X, Y)
};
+
+float quadVertices[] = {
+ -1.f, -1.f, 0.0f,0.0f, // Vertex 1 (X, Y)
+ 1.f, -1.f, 1.0f,0.0f, // Vertex 2 (X, Y)
+ 1.f, 1.f, 1.0f,1.0f, // Vertex 3 (X, Y)
+
+ 1.f, 1.f, 1.0f,1.0f, // Vertex 3 (X, Y)
+ -1.f, 1.f, 0.0f,1.0f, // Vertex 4 (X, Y)
+ -1.f, -1.f, 0.0f,0.0f // Vertex 1 (X, Y)
+};
+
+
void calcVerticesRotated(int xshift, int yshift, float angle, float* v)
{
Point2f pt;
@@ -108,10 +135,10 @@ void compileShaderProgram(const GLchar* vertSrc, const GLchar* fragSrc, GLuint&
glLinkProgram(shaderProgram);
}
-GLuint justDrawASpriteShaderProgram(GLuint vao, GLuint vbo)
+GLuint justDrawASpriteShaderProgram(GLuint vao, GLuint vbo, bool gray=false)
{
GLuint vertexShader, fragmentShader, shaderProgram;
- compileShaderProgram(justDrawASpriteVertexSource, justDrawASpriteFragmentSource, vertexShader, fragmentShader, shaderProgram);
+ compileShaderProgram(justDrawASpriteVertexSource, gray? justDrawASpriteFragmentSourceGray : justDrawASpriteFragmentSource, vertexShader, fragmentShader, shaderProgram);
glBindVertexArray(vao);
@@ -141,7 +168,7 @@ GLFWwindow* initOpenGL()
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
- GLFWwindow* window = glfwCreateWindow(CANVAS_WIDTH, CANVAS_HEIGHT, "OpenGL", NULL, NULL); // Windowed
+ GLFWwindow* window = glfwCreateWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "OpenGL", NULL, NULL); // Windowed
// GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", glfwGetPrimaryMonitor(), nullptr); // Fullscreen
glfwMakeContextCurrent(window);
@@ -212,8 +239,8 @@ int main(int argc, const char** argv)
glBindBuffer(GL_ARRAY_BUFFER, vboCanvas);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
- //glBindBuffer(GL_ARRAY_BUFFER, vboQuad);
- //glBufferData(GL_ARRAY_BUFFER, sizeof(quadVertices), quadVertices, GL_STATIC_DRAW);
+ glBindBuffer(GL_ARRAY_BUFFER, vboQuad);
+ glBufferData(GL_ARRAY_BUFFER, sizeof(quadVertices), quadVertices, GL_STATIC_DRAW);
@@ -221,6 +248,7 @@ int main(int argc, const char** argv)
// compile shaders
GLuint shaderProgram = justDrawASpriteShaderProgram(vaoCanvas, vboCanvas);
+ GLuint quadShaderProgram = justDrawASpriteShaderProgram(vaoQuad, vboQuad, true);
// texture
@@ -233,7 +261,7 @@ int main(int argc, const char** argv)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-/*
+
// Framebuffer stuff
GLuint frameBuffer;
glGenFramebuffers(1, &frameBuffer);
@@ -243,17 +271,13 @@ int main(int argc, const char** argv)
glGenTextures(1, &texColorBuffer);
glBindTexture(GL_TEXTURE_2D, texColorBuffer);
- glTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGB, 8000, 6000, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL
- );
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, CANVAS_WIDTH, CANVAS_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glFramebufferTexture2D(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texColorBuffer, 0
- );
-*/
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texColorBuffer, 0);
+
@@ -384,7 +408,6 @@ int main(int argc, const char** argv)
-
glBindTexture(GL_TEXTURE_2D, texVideo);
Mat frame_gl = frame.clone();
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, frame_gl.size().width, frame_gl.size().height, 0, GL_RGB, GL_UNSIGNED_BYTE, frame_gl.ptr<unsigned char>(0));
@@ -396,6 +419,8 @@ int main(int argc, const char** argv)
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
+ glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
+ glViewport(0,0,CANVAS_WIDTH,CANVAS_HEIGHT);
glBindVertexArray(vaoCanvas);
glUseProgram(shaderProgram);
glActiveTexture(GL_TEXTURE0);
@@ -403,6 +428,15 @@ int main(int argc, const char** argv)
glDrawArrays(GL_TRIANGLES, 0, 6);
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
+ glViewport(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
+ glBindVertexArray(vaoQuad);
+ glUseProgram(quadShaderProgram);
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, texColorBuffer);
+ glDrawArrays(GL_TRIANGLES, 0, 6);
+
+
glfwSwapBuffers(window);
glfwPollEvents();