commit
f35d7b6525
4 changed files with 193 additions and 0 deletions
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
cmake_minimum_required(VERSION 3.24) |
||||
project(glapp2) |
||||
|
||||
set(CMAKE_CXX_STANDARD 17) |
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON) |
||||
set(CMAKE_CXX_STANDARD 17) |
||||
|
||||
add_executable(glapp2 main.cpp) |
||||
|
||||
find_package(OpenGL) |
||||
if(${OPENGL_FOUND}) |
||||
target_link_libraries(glapp2 ${OPENGL_LIBRARIES}) |
||||
message(${OPENGL_LIBRARIES}) |
||||
target_link_libraries(glapp2 OpenGL::GL) |
||||
endif() |
||||
|
||||
find_package(GLEW) |
||||
if(${GLEW_FOUND}) |
||||
message(${GLEW_LIBRARIES}) |
||||
message(${GLEW_INCLUDE_DIRS}) |
||||
target_link_libraries(glapp2 ${GLEW_LIBRARIES}) |
||||
endif() |
||||
#include_directories(glapp2 /usr/include/GLFW) |
||||
#target_link_libraries(glapp2 glfw3) |
||||
find_package(glfw3) |
||||
if(${GLFW3_FOUND}) |
||||
target_link_libraries(glapp2 glfw) |
||||
endif() |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
#version 430 |
||||
out vec4 color; |
||||
void main() { |
||||
color = vec4(0.3,0.7,0.5,1.0); |
||||
} |
@ -0,0 +1,150 @@
@@ -0,0 +1,150 @@
|
||||
#include <iostream> |
||||
#include <GL/glew.h> |
||||
#include <GLFW/glfw3.h> |
||||
|
||||
#include <string> |
||||
#include <iostream> |
||||
#include <fstream> |
||||
#include <sstream> |
||||
|
||||
using namespace std; |
||||
#define vaoNum 1 |
||||
GLuint rederingProgram; |
||||
GLuint vao[vaoNum]; |
||||
|
||||
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); |
||||
} |
||||
} |
||||
|
||||
bool checkOpenGLError(){ |
||||
bool foundError = false; |
||||
int glErr = glGetError(); |
||||
while (glErr !=GL_NO_ERROR){ |
||||
cout<<"glError: "<<glErr<<endl; |
||||
foundError = true; |
||||
glErr = glGetError(); |
||||
} |
||||
return foundError; |
||||
} |
||||
|
||||
string readfile(char *filename) { |
||||
fstream fs(filename); |
||||
stringstream buffer; |
||||
buffer << fs.rdbuf(); |
||||
return buffer.str(); |
||||
} |
||||
|
||||
GLuint prepareShader(int shaderTYPE, char* filename){ |
||||
GLint shaderCompliled; |
||||
string shaderStr = readfile(filename); |
||||
const char* shaderSrc = shaderStr.c_str(); |
||||
GLuint shaderRef = glCreateShader(shaderTYPE); |
||||
glShaderSource(shaderRef,1,&shaderSrc,NULL); |
||||
glCompileShader(shaderRef); |
||||
checkOpenGLError(); |
||||
glGetShaderiv(shaderRef,GL_COMPILE_STATUS,&shaderCompliled); |
||||
if(shaderCompliled !=1){ |
||||
cout<<"shader compilation error."<<endl; |
||||
printShaderLog(shaderRef); |
||||
} |
||||
return shaderRef; |
||||
} |
||||
|
||||
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<<"Prog Info Log: "<<log<<endl; |
||||
free(log); |
||||
} |
||||
} |
||||
|
||||
int finalizeShaderProgram(GLuint sprogram){ |
||||
GLint linked; |
||||
glLinkProgram(sprogram); |
||||
checkOpenGLError(); |
||||
glGetProgramiv(sprogram,GL_LINK_STATUS,&linked); |
||||
if(linked !=1){ |
||||
cout<<"linking failed"<<endl; |
||||
printProgramLog(sprogram); |
||||
} |
||||
return sprogram; |
||||
} |
||||
|
||||
GLuint createShaderProgram(char* vertex,char* fragment){ |
||||
GLuint vShader = prepareShader(GL_VERTEX_SHADER,vertex); |
||||
GLuint fShader = prepareShader(GL_FRAGMENT_SHADER,fragment); |
||||
GLuint vfprogram = glCreateProgram(); |
||||
glAttachShader(vfprogram,vShader); |
||||
glAttachShader(vfprogram,fShader); |
||||
finalizeShaderProgram(vfprogram); |
||||
return vfprogram; |
||||
} |
||||
|
||||
void window_size_callback(GLFWwindow* win, int newWidth,int newHeight){ |
||||
glViewport(0,0,newWidth,newHeight); |
||||
} |
||||
|
||||
void display(GLFWwindow* window){ |
||||
glClear(GL_DEPTH_BUFFER_BIT); |
||||
glClearColor(0.1,0.2,0.3,0.4); |
||||
glClear(GL_COLOR_BUFFER_BIT); |
||||
|
||||
glUseProgram(rederingProgram); |
||||
glDrawArrays(GL_TRIANGLES,0,3); |
||||
} |
||||
|
||||
void init(GLFWwindow* window){ |
||||
rederingProgram = createShaderProgram("../vertex.glsl","../fragment.glsl"); |
||||
int width,height; |
||||
glfwGetFramebufferSize(window,&width,&height); |
||||
double aspect = (float)width/(float)height; |
||||
glGenVertexArrays(1,vao); |
||||
glBindVertexArray(vao[0]); |
||||
} |
||||
|
||||
int main() { |
||||
|
||||
if(!glfwInit()){exit(EXIT_FAILURE);} |
||||
std::cout<<__LINE__<<std::endl; |
||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,4); |
||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3); |
||||
GLFWwindow *window = glfwCreateWindow(600,400,"triangle", nullptr, nullptr); |
||||
std::cout<<__LINE__<<std::endl; |
||||
glfwMakeContextCurrent(window); |
||||
std::cout<<__LINE__<<std::endl; |
||||
if(glewInit() != GLEW_OK){exit(EXIT_FAILURE);} |
||||
std::cout<<__LINE__<<std::endl; |
||||
init(window); |
||||
std::cout<<__LINE__<<std::endl; |
||||
glfwSetWindowSizeCallback(window,window_size_callback); |
||||
std::cout<<__LINE__<<std::endl; |
||||
while(!glfwWindowShouldClose(window)){ |
||||
std::cout<<__LINE__<<std::endl; |
||||
display(window); |
||||
glfwSwapBuffers(window); |
||||
glfwPollEvents(); |
||||
} |
||||
std::cout<<__LINE__<<std::endl; |
||||
glfwDestroyWindow(window); |
||||
glfwTerminate(); |
||||
|
||||
|
||||
// cout << readfile("../vertex.glsl") << endl;
|
||||
std::cout << "Hello, World!" << std::endl; |
||||
exit(EXIT_SUCCESS); |
||||
return 0; |
||||
} |
Loading…
Reference in new issue