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;
}

Reply via email to