This file compile properly with g++, but not with emscripten. I tried
playing around with the includes and these are the same includes as in the
hello_world_gles.c test file that comes with emscripten. I believe it uses
the same functions, but emscripten says it can't find them.
Thanks
--
You received this message because you are subscribed to the Google Groups
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.
#include <stdio.h>
#include <string.h>
#include <GL/gl.h>
#include <GL/glut.h>
#include <math.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include "math_3d.h"
#include "data_holder.h"
GLuint VBO_vertices, VBO1, VBO2, VBO3, VBO4, VBO5, VBO6, VBO7, VBO8;
int window_width, window_height;
static const char* pVS = " \n\
#version 330 \n\
\n\
layout (location = 0) in vec3 Position; \n\
\n\
void main() \n\
{ \n\
gl_Position = vec4(0.5 * Position.x, 0.5 * Position.y, Position.z, 1.0); \n\
}";
static const char* pFS = " \n\
#version 330 \n\
\n\
out vec4 FragColor; \n\
\n\
void main() \n\
{ \n\
FragColor = vec4(1.0, 0.0, 0.0, 1.0); \n\
}";
static void RenderSceneCB()
{
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO_vertices);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glPointSize(5);
glDrawArrays(GL_POINTS, 0, 5);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO1);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINES, 0, 2);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO2);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINES, 0, 2);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO3);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINES, 0, 2);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO4);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINES, 0, 2);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO5);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINES, 0, 2);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO6);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINES, 0, 2);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO7);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINES, 0, 2);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO8);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINES, 0, 2);
glDisableVertexAttribArray(0);
glutSwapBuffers();
}
void rato1(int button, int state, int x, int y){
if(state != GLUT_DOWN && button == GLUT_LEFT_BUTTON){
window_width = glutGet(GLUT_WINDOW_WIDTH);
window_height = glutGet(GLUT_WINDOW_HEIGHT);
GLbyte color[4];
GLfloat depth;
GLuint index;
glReadPixels(x, window_height - y - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, color);
glReadPixels(x, window_height - y - 1, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth);
glReadPixels(x, window_height - y - 1, 1, 1, GL_STENCIL_INDEX, GL_UNSIGNED_INT, &index);
printf("Clicked on pixel %d, %d, color %02hhx%02hhx%02hhx%02hhx, depth %f, stencil index %u\n",
x, y, color[0], color[1], color[2], color[3], depth, index);
} else {
return;
}
}
static void InitializeGlutCallbacks()
{
glutDisplayFunc(RenderSceneCB);
}
static void CreateVertexBuffer()
{
Vector3f Vertices[8];
Vertices[0] = Vector3f(0.2f, 0.2f, 0.0f);
Vertices[1] = Vector3f(0.6f, 0.2f, 0.0f);
Vertices[2] = Vector3f(0.6f, 0.6f, 0.0f);
Vertices[3] = Vector3f(0.2f, 0.6f, 0.0f);
Vertices[4] = Vector3f(1.0f, 1.0f, 0.0f);
glGenBuffers(1, &VBO_vertices);
glBindBuffer(GL_ARRAY_BUFFER, VBO_vertices);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
Vector3f aresta1[2];
aresta1[0] = Vector3f(0.2f, 0.2f, 0.0f);
aresta1[1] = Vector3f(0.6f, 0.2f, 0.0f);
Vector3f aresta2[2];
aresta2[0] = Vector3f(0.6f, 0.2f, 0.0f);
aresta2[1] = Vector3f(0.6f, 0.6f, 0.0f);
Vector3f aresta3[2];
aresta3[0] = Vector3f(0.6f, 0.6f, 0.0f);
aresta3[1] = Vector3f(0.2f, 0.6f, 0.0f);
Vector3f aresta4[2];
aresta4[0] = Vector3f(0.2f, 0.2f, 0.0f);
aresta4[1] = Vector3f(0.2f, 0.6f, 0.0f);
Vector3f aresta5[2];
aresta5[0] = Vector3f(0.6f, 0.2f, 0.0f);
aresta5[1] = Vector3f(0.2f, 0.6f, 0.0f);
Vector3f aresta6[2];
aresta6[0] = Vector3f(0.6f, 0.2f, 0.0f);
aresta6[1] = Vector3f(1.0f, 1.0f, 0.0f);
Vector3f aresta7[2];
aresta7[0] = Vector3f(0.6f, 0.6f, 0.0f);
aresta7[1] = Vector3f(1.0f, 1.0f, 0.0f);
Vector3f aresta8[2];
aresta8[0] = Vector3f(0.2f, 0.6f, 0.0f);
aresta8[1] = Vector3f(1.0f, 1.0f, 0.0f);
glGenBuffers(1, &VBO1);
glBindBuffer(GL_ARRAY_BUFFER, VBO1);
glBufferData(GL_ARRAY_BUFFER, sizeof(aresta1), aresta1, GL_STATIC_DRAW);
glGenBuffers(1, &VBO2);
glBindBuffer(GL_ARRAY_BUFFER, VBO2);
glBufferData(GL_ARRAY_BUFFER, sizeof(aresta2), aresta2, GL_STATIC_DRAW);
glGenBuffers(1, &VBO3);
glBindBuffer(GL_ARRAY_BUFFER, VBO3);
glBufferData(GL_ARRAY_BUFFER, sizeof(aresta3), aresta3, GL_STATIC_DRAW);
glGenBuffers(1, &VBO4);
glBindBuffer(GL_ARRAY_BUFFER, VBO4);
glBufferData(GL_ARRAY_BUFFER, sizeof(aresta4), aresta4, GL_STATIC_DRAW);
glGenBuffers(1, &VBO5);
glBindBuffer(GL_ARRAY_BUFFER, VBO5);
glBufferData(GL_ARRAY_BUFFER, sizeof(aresta5), aresta5, GL_STATIC_DRAW);
glGenBuffers(1, &VBO6);
glBindBuffer(GL_ARRAY_BUFFER, VBO6);
glBufferData(GL_ARRAY_BUFFER, sizeof(aresta6), aresta6, GL_STATIC_DRAW);
glGenBuffers(1, &VBO7);
glBindBuffer(GL_ARRAY_BUFFER, VBO7);
glBufferData(GL_ARRAY_BUFFER, sizeof(aresta7), aresta7, GL_STATIC_DRAW);
glGenBuffers(1, &VBO8);
glBindBuffer(GL_ARRAY_BUFFER, VBO8);
glBufferData(GL_ARRAY_BUFFER, sizeof(aresta8), aresta8, GL_STATIC_DRAW);
}
static void AddShader(GLuint ShaderProgram, const char* pShaderText, GLenum ShaderType)
{
GLuint ShaderObj = glCreateShader(ShaderType);
if (ShaderObj == 0) {
fprintf(stderr, "Error creating shader type %d\n", ShaderType);
exit(0);
}
const GLchar* p[1];
p[0] = pShaderText;
GLint Lengths[1];
Lengths[0]= strlen(pShaderText);
glShaderSource(ShaderObj, 1, p, Lengths);
glCompileShader(ShaderObj);
GLint success;//Compilar o shader
glGetShaderiv(ShaderObj, GL_COMPILE_STATUS, &success);
if (!success) {
GLchar InfoLog[1024];
glGetShaderInfoLog(ShaderObj, 1024, NULL, InfoLog);
fprintf(stderr, "Error compiling shader type %d: '%s'\n", ShaderType, InfoLog);
exit(1);
}
glAttachShader(ShaderProgram, ShaderObj);
}
static void CompileShaders()
{
GLuint ShaderProgram = glCreateProgram();
if (ShaderProgram == 0) {
fprintf(stderr, "Error creating shader program\n");
exit(1);
}
AddShader(ShaderProgram, pVS, GL_VERTEX_SHADER);
AddShader(ShaderProgram, pFS, GL_FRAGMENT_SHADER);
GLint Success = 0;
GLchar ErrorLog[1024] = { 0 };
glLinkProgram(ShaderProgram);
glGetProgramiv(ShaderProgram, GL_LINK_STATUS, &Success);
if (Success == 0) {
glGetProgramInfoLog(ShaderProgram, sizeof(ErrorLog), NULL, ErrorLog);
fprintf(stderr, "Error linking shader program: '%s'\n", ErrorLog);
exit(1);
}
glValidateProgram(ShaderProgram);
glGetProgramiv(ShaderProgram, GL_VALIDATE_STATUS, &Success);
if (!Success) {
glGetProgramInfoLog(ShaderProgram, sizeof(ErrorLog), NULL, ErrorLog);
fprintf(stderr, "Invalid shader program: '%s'\n", ErrorLog);
exit(1);
}
glUseProgram(ShaderProgram);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_STENCIL);
glutInitWindowSize(1024, 768);
glutInitWindowPosition(100, 100);
glutCreateWindow("Exemplo Grafo");
InitializeGlutCallbacks();
// Must be done after glut is initialized!
GLenum res = glewInit();
if (res != GLEW_OK) {
fprintf(stderr, "Error: '%s'\n", glewGetErrorString(res));
return 1;
}
printf("GL version: %s\n", glGetString(GL_VERSION));
glutMouseFunc(rato1);
CreateVertexBuffer();
CompileShaders();
glutMainLoop();
return 0;
}