mirror of
https://github.com/alibaba/GCanvas.git
synced 2025-12-08 17:36:42 +00:00
101 lines
3.2 KiB
C++
101 lines
3.2 KiB
C++
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <GCanvas.hpp>
|
|
|
|
//using opengl es on linux
|
|
#define GLFW_INCLUDE_ES2
|
|
#include <GLFW/glfw3.h>
|
|
|
|
static const GLuint WIDTH = 800;
|
|
static const GLuint HEIGHT = 600;
|
|
static const GLchar* vertex_shader_source =
|
|
"#version 100\n"
|
|
"attribute vec3 position;\n"
|
|
"void main() {\n"
|
|
" gl_Position = vec4(position, 1.0);\n"
|
|
"}\n";
|
|
static const GLchar* fragment_shader_source =
|
|
"#version 100\n"
|
|
"void main() {\n"
|
|
" gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n"
|
|
"}\n";
|
|
static const GLfloat vertices[] = {
|
|
0.0f, 0.5f, 0.0f,
|
|
0.5f, -0.5f, 0.0f,
|
|
-0.5f, -0.5f, 0.0f,
|
|
};
|
|
|
|
GLint common_get_shader_program(const char *vertex_shader_source, const char *fragment_shader_source) {
|
|
enum Consts {INFOLOG_LEN = 512};
|
|
GLchar infoLog[INFOLOG_LEN];
|
|
GLint fragment_shader;
|
|
GLint shader_program;
|
|
GLint success;
|
|
GLint vertex_shader;
|
|
|
|
/* Vertex shader */
|
|
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
|
|
glShaderSource(vertex_shader, 1, &vertex_shader_source, NULL);
|
|
glCompileShader(vertex_shader);
|
|
glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success);
|
|
if (!success) {
|
|
glGetShaderInfoLog(vertex_shader, INFOLOG_LEN, NULL, infoLog);
|
|
printf("ERROR::SHADER::VERTEX::COMPILATION_FAILED\n%s\n", infoLog);
|
|
}
|
|
|
|
/* Fragment shader */
|
|
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
|
|
glShaderSource(fragment_shader, 1, &fragment_shader_source, NULL);
|
|
glCompileShader(fragment_shader);
|
|
glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &success);
|
|
if (!success) {
|
|
glGetShaderInfoLog(fragment_shader, INFOLOG_LEN, NULL, infoLog);
|
|
printf("ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n%s\n", infoLog);
|
|
}
|
|
|
|
/* Link shaders */
|
|
shader_program = glCreateProgram();
|
|
glAttachShader(shader_program, vertex_shader);
|
|
glAttachShader(shader_program, fragment_shader);
|
|
glLinkProgram(shader_program);
|
|
glGetProgramiv(shader_program, GL_LINK_STATUS, &success);
|
|
if (!success) {
|
|
glGetProgramInfoLog(shader_program, INFOLOG_LEN, NULL, infoLog);
|
|
printf("ERROR::SHADER::PROGRAM::LINKING_FAILED\n%s\n", infoLog);
|
|
}
|
|
|
|
glDeleteShader(vertex_shader);
|
|
glDeleteShader(fragment_shader);
|
|
return shader_program;
|
|
}
|
|
|
|
int main(void) {
|
|
GLuint shader_program, vbo;
|
|
GLint pos;
|
|
GLFWwindow* window;
|
|
glfwInit();
|
|
glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
|
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
|
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
|
|
window = glfwCreateWindow(WIDTH, HEIGHT, __FILE__, NULL, NULL);
|
|
glfwMakeContextCurrent(window);
|
|
|
|
printf("GL_VERSION : %s\n", glGetString(GL_VERSION) );
|
|
printf("GL_RENDERER : %s\n", glGetString(GL_RENDERER) );
|
|
|
|
|
|
gcanvas:: GCanvas c("id",{false,true},nullptr);
|
|
c.CreateContext();
|
|
c.OnSurfaceChanged(0,0,WIDTH,HEIGHT);
|
|
|
|
while (!glfwWindowShouldClose(window)) {
|
|
glfwPollEvents();
|
|
c.mCanvasContext->SetFillStyle("#ff0000");
|
|
c.mCanvasContext->FillRect(0,0,WIDTH,HEIGHT);
|
|
c.drawFrame();
|
|
glfwSwapBuffers(window);
|
|
}
|
|
glDeleteBuffers(1, &vbo);
|
|
glfwTerminate();
|
|
return EXIT_SUCCESS;
|
|
} |