commit
b865a86dd2
6 changed files with 270 additions and 0 deletions
@ -0,0 +1,73 @@ |
|||||||
|
# This file is used to ignore files which are generated |
||||||
|
# ---------------------------------------------------------------------------- |
||||||
|
|
||||||
|
*~ |
||||||
|
*.autosave |
||||||
|
*.a |
||||||
|
*.core |
||||||
|
*.moc |
||||||
|
*.o |
||||||
|
*.obj |
||||||
|
*.orig |
||||||
|
*.rej |
||||||
|
*.so |
||||||
|
*.so.* |
||||||
|
*_pch.h.cpp |
||||||
|
*_resource.rc |
||||||
|
*.qm |
||||||
|
.#* |
||||||
|
*.*# |
||||||
|
core |
||||||
|
!core/ |
||||||
|
tags |
||||||
|
.DS_Store |
||||||
|
.directory |
||||||
|
*.debug |
||||||
|
Makefile* |
||||||
|
*.prl |
||||||
|
*.app |
||||||
|
moc_*.cpp |
||||||
|
ui_*.h |
||||||
|
qrc_*.cpp |
||||||
|
Thumbs.db |
||||||
|
*.res |
||||||
|
*.rc |
||||||
|
/.qmake.cache |
||||||
|
/.qmake.stash |
||||||
|
|
||||||
|
# qtcreator generated files |
||||||
|
*.pro.user* |
||||||
|
|
||||||
|
# xemacs temporary files |
||||||
|
*.flc |
||||||
|
|
||||||
|
# Vim temporary files |
||||||
|
.*.swp |
||||||
|
|
||||||
|
# Visual Studio generated files |
||||||
|
*.ib_pdb_index |
||||||
|
*.idb |
||||||
|
*.ilk |
||||||
|
*.pdb |
||||||
|
*.sln |
||||||
|
*.suo |
||||||
|
*.vcproj |
||||||
|
*vcproj.*.*.user |
||||||
|
*.ncb |
||||||
|
*.sdf |
||||||
|
*.opensdf |
||||||
|
*.vcxproj |
||||||
|
*vcxproj.* |
||||||
|
|
||||||
|
# MinGW generated files |
||||||
|
*.Debug |
||||||
|
*.Release |
||||||
|
|
||||||
|
# Python byte code |
||||||
|
*.pyc |
||||||
|
|
||||||
|
# Binaries |
||||||
|
# -------- |
||||||
|
*.dll |
||||||
|
*.exe |
||||||
|
|
@ -0,0 +1,19 @@ |
|||||||
|
cmake_minimum_required(VERSION 3.5) |
||||||
|
|
||||||
|
project(glapp1 LANGUAGES CXX) |
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17) |
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON) |
||||||
|
|
||||||
|
add_executable(glapp1 main.cpp) |
||||||
|
find_package(OpenGL) |
||||||
|
if(${OPENGL_FOUND}) |
||||||
|
# message(glu ${OPENGL_LIBRARIES}) |
||||||
|
target_link_libraries(glapp1 ${OPENGL_LIBRARIES}) |
||||||
|
endif() |
||||||
|
find_package(GLEW) |
||||||
|
if(${GLEW_FOUND}) |
||||||
|
target_link_libraries(glapp1 ${GLEW_LIBRARIES}) |
||||||
|
endif() |
||||||
|
|
||||||
|
target_link_libraries(glapp1 glfw3) |
@ -0,0 +1,11 @@ |
|||||||
|
|
||||||
|
#version 430 |
||||||
|
out vec4 color; |
||||||
|
void main(void) |
||||||
|
{ |
||||||
|
if (gl_FragCoord.x < 200) |
||||||
|
color = vec4(1.0, 0, 1.0, 1.0); |
||||||
|
else |
||||||
|
color = vec4(1.0, 1.0, 0, 1.0); |
||||||
|
// color = vec4(cos(double(gl_FragCoord.x)/30),sin(double(gl_FragCoord.y)/35),sin((double(gl_FragCoord.x)+double(gl_FragCoord.y)*2.5)/15),1.0); |
||||||
|
} |
@ -0,0 +1,153 @@ |
|||||||
|
#include <GL/glew.h> |
||||||
|
#include <GLFW/glfw3.h> |
||||||
|
#include <iostream> |
||||||
|
#include <string> |
||||||
|
#include <fstream> |
||||||
|
|
||||||
|
using namespace std; |
||||||
|
|
||||||
|
void printShaderLog(GLuint shader) { |
||||||
|
int len = 0; |
||||||
|
int chWrittn = 0; |
||||||
|
char *log; |
||||||
|
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &len); |
||||||
|
if (len > 0) { |
||||||
|
log = (char *) malloc(len); |
||||||
|
glGetShaderInfoLog(shader, len, &chWrittn, log); |
||||||
|
cout << "Shader Info Log: " << log << endl; |
||||||
|
free(log); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void printProgramLog(int prog) { |
||||||
|
int len = 0; |
||||||
|
int chWrittn = 0; |
||||||
|
char *log; |
||||||
|
glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &len); |
||||||
|
if (len > 0) { |
||||||
|
log = (char *) malloc(len); |
||||||
|
glGetProgramInfoLog(prog, len, &chWrittn, log); |
||||||
|
cout << "Program Info Log: " << log << endl; |
||||||
|
free(log); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
bool checkOpenGLError() { |
||||||
|
bool foundError = false; |
||||||
|
int glErr = glGetError(); |
||||||
|
while (glErr != GL_NO_ERROR) { |
||||||
|
cout << "glError : " << glErr << endl; |
||||||
|
foundError = true; |
||||||
|
glErr = glGetError(); |
||||||
|
} |
||||||
|
return foundError; |
||||||
|
} |
||||||
|
|
||||||
|
string readShaderSource(const char *filePath) { |
||||||
|
string content; |
||||||
|
ifstream fileStream(filePath, ios::in); |
||||||
|
string line = ""; |
||||||
|
while (!fileStream.eof()) { |
||||||
|
getline(fileStream, line); |
||||||
|
content.append(line + "\n"); |
||||||
|
} |
||||||
|
fileStream.close(); |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
using namespace std; |
||||||
|
|
||||||
|
#define numVAOs 1 |
||||||
|
|
||||||
|
GLuint renderingProgram; |
||||||
|
GLuint vao[numVAOs]; |
||||||
|
float x = 0.0f; |
||||||
|
float inc = 0.01f; |
||||||
|
|
||||||
|
GLuint createShaderProgram() { |
||||||
|
|
||||||
|
const char *vshaderSource = readShaderSource("../tri.vert").c_str(); |
||||||
|
// const char *vshaderSource = "#version 430 \n"
|
||||||
|
// "\n"
|
||||||
|
// "void main(void)\n"
|
||||||
|
// "{\n"
|
||||||
|
// " if (gl_VertexID == 0) gl_Position = vec4( 0.25, -0.25, 0.0, 1.0);\n"
|
||||||
|
// "else if (gl_VertexID == 1) gl_Position = vec4(-0.25, -0.25, 0.0, 1.0);\n"
|
||||||
|
// " else gl_Position = vec4( 0.25, 0.25, 0.0, 1.0);}";
|
||||||
|
// cout<<vshaderSource;
|
||||||
|
const char *fshaderSource = readShaderSource("../firstvert.vert").c_str(); |
||||||
|
// cout<<fshaderSource;
|
||||||
|
GLuint vShader = glCreateShader(GL_VERTEX_SHADER); |
||||||
|
GLuint fShader = glCreateShader(GL_FRAGMENT_SHADER); |
||||||
|
|
||||||
|
glShaderSource(vShader, 1, &vshaderSource, NULL); |
||||||
|
glShaderSource(fShader, 1, &fshaderSource, NULL); |
||||||
|
|
||||||
|
printShaderLog(vShader); |
||||||
|
printShaderLog(fShader); |
||||||
|
|
||||||
|
glCompileShader(fShader); |
||||||
|
glCompileShader(vShader); |
||||||
|
|
||||||
|
cout<<"on vShader"; |
||||||
|
printShaderLog(vShader); |
||||||
|
cout<<"on fShader"; |
||||||
|
printShaderLog(fShader); |
||||||
|
|
||||||
|
GLuint vfProgram = glCreateProgram(); |
||||||
|
glAttachShader(vfProgram, vShader); |
||||||
|
glAttachShader(vfProgram, fShader); |
||||||
|
glLinkProgram(vfProgram); |
||||||
|
return vfProgram; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void init(GLFWwindow *window) { |
||||||
|
renderingProgram = createShaderProgram(); |
||||||
|
glGenVertexArrays(numVAOs, vao); |
||||||
|
glBindVertexArray(vao[0]); |
||||||
|
} |
||||||
|
|
||||||
|
void display(GLFWwindow *window, double currentTime) { |
||||||
|
|
||||||
|
glClear(GL_DEPTH_BUFFER_BIT); |
||||||
|
glClearColor(0, 0, 0, 1); |
||||||
|
glClear(GL_COLOR_BUFFER_BIT); |
||||||
|
glUseProgram(renderingProgram); |
||||||
|
|
||||||
|
// printProgramLog(renderingProgram);
|
||||||
|
// glPointSize(3);
|
||||||
|
// x += inc;
|
||||||
|
// if (x > 1.0f) inc = -0.01f;
|
||||||
|
// if (x < -1.0f) inc = 0.01f;
|
||||||
|
// cout << x << endl;;
|
||||||
|
// GLuint offsetLoc = glGetUniformLocation(renderingProgram, "offset");
|
||||||
|
// glProgramUniform1f(renderingProgram, offsetLoc, x);
|
||||||
|
glDrawArrays(GL_TRIANGLES, 0, 3); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
int main(void) { |
||||||
|
if (!glfwInit()) { exit(EXIT_FAILURE); } |
||||||
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); |
||||||
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); |
||||||
|
GLFWwindow *window = glfwCreateWindow(600, 600, "GLAPP0", NULL, NULL); |
||||||
|
glfwMakeContextCurrent(window); |
||||||
|
if (glewInit() != GLEW_OK) { |
||||||
|
exit(EXIT_FAILURE); |
||||||
|
} |
||||||
|
glfwSwapInterval(1); |
||||||
|
init(window); |
||||||
|
|
||||||
|
checkOpenGLError(); |
||||||
|
while (!glfwWindowShouldClose(window)) { |
||||||
|
display(window, glfwGetTime()); |
||||||
|
glfwSwapBuffers(window); |
||||||
|
glfwPollEvents(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
glfwDestroyWindow(window); |
||||||
|
glfwTerminate(); |
||||||
|
exit(EXIT_SUCCESS); |
||||||
|
} |
Loading…
Reference in new issue