remove old Linux texture test file
This commit is contained in:
@@ -1,356 +0,0 @@
|
||||
// static gboolean
|
||||
// create_contextp (GtkGLArea *area, GdkGLContext *context)
|
||||
// {
|
||||
// std::cout << "CREATE CONTEXT" << std::endl;
|
||||
// gdk_gl_context_set_debug_enabled(context, true);
|
||||
|
||||
// // gtk_gl_area_make_current (area);
|
||||
// std::cout << "MADE CURENTR" << std::endl;
|
||||
// return TRUE;
|
||||
// }
|
||||
|
||||
|
||||
/* position and color information for each vertex */
|
||||
struct vertex_info {
|
||||
float position[3];
|
||||
float color[3];
|
||||
};
|
||||
|
||||
/* the vertex data is constant */
|
||||
static const struct vertex_info vertex_data[] = {
|
||||
{ { 0.0f, 0.500f, 0.0f }, { 1.f, 0.f, 0.f } },
|
||||
{ { 0.5f, -0.366f, 0.0f }, { 0.f, 1.f, 0.f } },
|
||||
{ { -0.5f, -0.366f, 0.0f }, { 0.f, 0.f, 1.f } },
|
||||
};
|
||||
|
||||
static void
|
||||
init_buffers (guint position_index,
|
||||
guint color_index,
|
||||
guint *vao_out)
|
||||
{
|
||||
guint vao, buffer;
|
||||
|
||||
/* we need to create a VAO to store the other buffers */
|
||||
glGenVertexArrays (1, &vao);
|
||||
glBindVertexArray (vao);
|
||||
|
||||
/* this is the VBO that holds the vertex data */
|
||||
glGenBuffers (1, &buffer);
|
||||
glBindBuffer (GL_ARRAY_BUFFER, buffer);
|
||||
glBufferData (GL_ARRAY_BUFFER, sizeof (vertex_data), vertex_data, GL_STATIC_DRAW);
|
||||
|
||||
/* enable and set the position attribute */
|
||||
glEnableVertexAttribArray (position_index);
|
||||
glVertexAttribPointer (position_index, 3, GL_FLOAT, GL_FALSE,
|
||||
sizeof (struct vertex_info),
|
||||
(GLvoid *) (G_STRUCT_OFFSET (struct vertex_info, position)));
|
||||
|
||||
/* enable and set the color attribute */
|
||||
glEnableVertexAttribArray (color_index);
|
||||
glVertexAttribPointer (color_index, 3, GL_FLOAT, GL_FALSE,
|
||||
sizeof (struct vertex_info),
|
||||
(GLvoid *) (G_STRUCT_OFFSET (struct vertex_info, color)));
|
||||
|
||||
/* reset the state; we will re-enable the VAO when needed */
|
||||
glBindBuffer (GL_ARRAY_BUFFER, 0);
|
||||
glBindVertexArray (0);
|
||||
|
||||
/* the VBO is referenced by the VAO */
|
||||
glDeleteBuffers (1, &buffer);
|
||||
|
||||
if (vao_out != NULL)
|
||||
*vao_out = vao;
|
||||
}
|
||||
|
||||
static guint
|
||||
create_shader (int shader_type,
|
||||
const char *source,
|
||||
GError **error,
|
||||
guint *shader_out)
|
||||
{
|
||||
guint shader = glCreateShader (shader_type);
|
||||
glShaderSource (shader, 1, &source, NULL);
|
||||
glCompileShader (shader);
|
||||
|
||||
int status;
|
||||
glGetShaderiv (shader, GL_COMPILE_STATUS, &status);
|
||||
if (status == GL_FALSE)
|
||||
{
|
||||
std::cout << "SHADER IV ERROR" << std::endl;
|
||||
}
|
||||
|
||||
if (shader_out != NULL)
|
||||
*shader_out = shader;
|
||||
|
||||
return shader != 0;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
init_shaders (guint *program_out,
|
||||
guint *position_location_out,
|
||||
guint *color_location_out,
|
||||
GError **error)
|
||||
{
|
||||
const char *vsource = R"POO(#version 130
|
||||
|
||||
in vec3 position;
|
||||
in vec3 color;
|
||||
|
||||
uniform mat4 mvp;
|
||||
|
||||
smooth out vec4 vertexColor;
|
||||
|
||||
void main() {
|
||||
gl_Position = vec4(position, 1.0);
|
||||
vertexColor = vec4(color, 1.0);
|
||||
})POO";
|
||||
|
||||
const char *fsource = R"POO(#version 130
|
||||
|
||||
smooth in vec4 vertexColor;
|
||||
|
||||
out vec4 outputColor;
|
||||
|
||||
void main() {
|
||||
outputColor = vertexColor;
|
||||
})POO";
|
||||
guint program = 0;
|
||||
|
||||
guint vertex = 0, fragment = 0;
|
||||
|
||||
guint position_location = 0;
|
||||
guint color_location = 0;
|
||||
|
||||
/* load the vertex shader */
|
||||
// source = g_resources_lookup_data ("/io/bassi/glarea/glarea-vertex.glsl", 0, NULL);
|
||||
create_shader (GL_VERTEX_SHADER, vsource, error, &vertex);
|
||||
// g_bytes_unref (source);
|
||||
if (vertex == 0) {
|
||||
std::cout << "VERTEX ERROR" << std::endl;
|
||||
}
|
||||
|
||||
|
||||
/* load the fragment shader */
|
||||
// source = g_resources_lookup_data ("/io/bassi/glarea/glarea-fragment.glsl", 0, NULL);
|
||||
create_shader (GL_FRAGMENT_SHADER, fsource, error, &fragment);
|
||||
|
||||
if (fragment == 0)
|
||||
std::cout << "FRAF ERROR" << std::endl;
|
||||
|
||||
/* link the vertex and fragment shaders together */
|
||||
program = glCreateProgram ();
|
||||
|
||||
if(program == 0) {
|
||||
std::cout << "PROG ZERO" << std::endl;
|
||||
}
|
||||
glAttachShader (program, vertex);
|
||||
glAttachShader (program, fragment);
|
||||
glLinkProgram (program);
|
||||
|
||||
int status = 0;
|
||||
glGetProgramiv (program, GL_LINK_STATUS, &status);
|
||||
if (status == GL_FALSE)
|
||||
{
|
||||
std::cout << "glGetProgramiv ERROR" << std::endl;
|
||||
goto out;
|
||||
}
|
||||
|
||||
position_location = glGetAttribLocation (program, "position");
|
||||
|
||||
/* get the location of the "position" and "color" attributes */
|
||||
color_location = glGetAttribLocation (program, "color");
|
||||
|
||||
/* the individual shaders can be detached and destroyed */
|
||||
glDetachShader (program, vertex);
|
||||
glDetachShader (program, fragment);
|
||||
|
||||
out:
|
||||
if (vertex != 0)
|
||||
glDeleteShader (vertex);
|
||||
if (fragment != 0)
|
||||
glDeleteShader (fragment);
|
||||
|
||||
if (program_out != NULL)
|
||||
*program_out = program;
|
||||
if (position_location_out != NULL)
|
||||
*position_location_out = position_location;
|
||||
if (color_location_out != NULL)
|
||||
*color_location_out = color_location;
|
||||
|
||||
return program != 0;
|
||||
}
|
||||
|
||||
static void
|
||||
gl_init (PolyvoxFilamentPlugin *self)
|
||||
{
|
||||
|
||||
/* we need to ensure that the GdkGLContext is set before calling GL API */
|
||||
gtk_gl_area_make_current (GTK_GL_AREA (self->gl_drawing_area));
|
||||
|
||||
/* if the GtkGLArea is in an error state we don't do anything */
|
||||
if (gtk_gl_area_get_error (GTK_GL_AREA (self->gl_drawing_area)) != NULL)
|
||||
return;
|
||||
|
||||
/* initialize the shaders and retrieve the program data */
|
||||
GError *error = NULL;
|
||||
if (!init_shaders (&self->program,
|
||||
&self->position_index,
|
||||
&self->color_index,
|
||||
&error))
|
||||
{
|
||||
/* set the GtkGLArea in error state, so we'll see the error message
|
||||
* rendered inside the viewport
|
||||
*/
|
||||
gtk_gl_area_set_error (GTK_GL_AREA (self->gl_drawing_area), error);
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
|
||||
/* initialize the vertex buffers */
|
||||
init_buffers (self->position_index, self->color_index, &self->vao);
|
||||
|
||||
}
|
||||
|
||||
// static void
|
||||
// gl_fini (PolyvoxFilamentPlugin *self)
|
||||
// {
|
||||
// /* we need to ensure that the GdkGLContext is set before calling GL API */
|
||||
// gtk_gl_area_make_current (GTK_GL_AREA (self->gl_drawing_area));
|
||||
|
||||
// /* skip everything if we're in error state */
|
||||
// if (gtk_gl_area_get_error (GTK_GL_AREA (self->gl_drawing_area)) != NULL)
|
||||
// return;
|
||||
|
||||
// /* destroy all the resources we created */
|
||||
// if (self->vao != 0)
|
||||
// glDeleteVertexArrays (1, &self->vao);
|
||||
// if (self->program != 0)
|
||||
// glDeleteProgram (self->program);
|
||||
// }
|
||||
|
||||
static void
|
||||
draw_triangle (PolyvoxFilamentPlugin *self)
|
||||
{
|
||||
if (self->program == 0 || self->vao == 0)
|
||||
return;
|
||||
|
||||
/* load our program */
|
||||
glUseProgram (self->program);
|
||||
|
||||
/* use the buffers in the VAO */
|
||||
glBindVertexArray (self->vao);
|
||||
|
||||
/* draw the three vertices as a triangle */
|
||||
glDrawArrays (GL_TRIANGLES, 0, 3);
|
||||
|
||||
/* we finished using the buffers and program */
|
||||
glBindVertexArray (0);
|
||||
glUseProgram (0);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gl_draw (PolyvoxFilamentPlugin *self)
|
||||
{
|
||||
/* clear the viewport; the viewport is automatically resized when
|
||||
* the GtkGLArea gets a new size allocation
|
||||
*/
|
||||
glClearColor (0.5, 0.5, 0.5, 1.0);
|
||||
glClear (GL_COLOR_BUFFER_BIT);
|
||||
|
||||
/* draw our object */
|
||||
draw_triangle (self);
|
||||
|
||||
/* flush the contents of the pipeline */
|
||||
glFlush ();
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
// static void
|
||||
// on_realize (GtkGLArea *area, PolyvoxFilamentPlugin* self)
|
||||
// {
|
||||
// std::cout << "REALIZE" << std::endl;
|
||||
|
||||
// // GdkGLContext* context = gtk_gl_area_get_context(area); // gdk_window_create_gl_context(window, &error);
|
||||
|
||||
// gtk_gl_area_make_current(area);
|
||||
|
||||
|
||||
// if(gtk_gl_area_get_error (area)) {
|
||||
// std::cout << "ERROR" << std::endl;
|
||||
// }
|
||||
|
||||
|
||||
// }
|
||||
|
||||
// static gboolean
|
||||
// renderp (GtkGLArea *area, GdkGLContext *context)
|
||||
// {
|
||||
|
||||
// glClearColor (0.0f, 1.0f, 0.0f, 1.0f);
|
||||
// glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
// GLuint vao;
|
||||
// glGenVertexArrays(1, &vao);
|
||||
// glBindVertexArray(vao);
|
||||
|
||||
// GLuint texture_id = 0;
|
||||
// glGenTextures (1, &texture_id);
|
||||
|
||||
// glBindTexture (GL_TEXTURE_2D, texture_id);
|
||||
|
||||
// // further configuration here.
|
||||
|
||||
// int len = 2000 * 2000 * 3;
|
||||
// auto buffer = new std::vector<uint8_t>(len);
|
||||
// for (int i = 0; i < len; i++)
|
||||
// {
|
||||
// if(i % 3 == 0) {
|
||||
// buffer->at(i) = (uint8_t)255;
|
||||
// } else {
|
||||
// buffer->at(i) = (uint8_t)0;
|
||||
// }
|
||||
|
||||
// }
|
||||
// glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB8, 2000, 2000, 0, GL_RGB,
|
||||
// GL_UNSIGNED_BYTE, buffer->data());
|
||||
|
||||
// std::cout << "RENDER texture iD" << texture_id << std::endl;
|
||||
|
||||
// // create_filament_texture(400, 200, self->texture_registrar);
|
||||
// glFinish();
|
||||
|
||||
|
||||
// std::cout << "RENDER" << std::endl;
|
||||
// // we completed our drawing; the draw commands will be
|
||||
// // flushed at the end of the signal emission chain, and
|
||||
// // the buffers will be drawn on the window
|
||||
// return TRUE;
|
||||
// }
|
||||
|
||||
|
||||
// GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET(self->fl_view));
|
||||
// if (gtk_widget_is_toplevel (toplevel))
|
||||
// {
|
||||
// std::cout << "TOPLEVLE" << std::endl;
|
||||
// }
|
||||
|
||||
// gdk_gl_context_set_debug_enabled(context, true);
|
||||
|
||||
|
||||
// GtkGLArea *gl_area = (GtkGLArea *) gtk_gl_area_new ();
|
||||
// gtk_widget_show(GTK_WIDGET(gl_area));
|
||||
// GtkBox* parent = GTK_BOX(gtk_widget_get_parent(GTK_WIDGET(self->fl_view)));
|
||||
// gtk_box_pack_start(parent, GTK_WIDGET(gl_area), true, true,0);
|
||||
// self->gl_drawing_area = GTK_WIDGET(gl_area);
|
||||
// GdkGLContext* context = gtk_gl_area_get_context(gl_area);
|
||||
|
||||
// g_signal_connect_swapped(gl_area, "realize", G_CALLBACK (gl_init), self);
|
||||
// g_signal_connect_swapped (gl_area, "render", G_CALLBACK (gl_draw), self);
|
||||
|
||||
// g_signal_connect (gl_area, "create-context", G_CALLBACK (create_contextp), NULL);
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user