Browse Source

first commit

master
zara 2 years ago
commit
f35d7b6525
  1. 28
      CMakeLists.txt
  2. 5
      fragment.glsl
  3. 150
      main.cpp
  4. 10
      vertex.glsl

28
CMakeLists.txt

@ -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()

5
fragment.glsl

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

150
main.cpp

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

10
vertex.glsl

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
#version 430
void main() {
if(gl_VertexID==0)
gl_Position = vec4(0.25,0.25,0.0,1.0);
else if(gl_VertexID==1)
gl_Position = vec4(0.5,0.5,0.0,1.0);
else if(gl_VertexID==2)
gl_Position = vec4(0.25,0.5,0.0,1.0);
}
Loading…
Cancel
Save