環境
- win10
- visual studio2019
第二章
P9 案例1——glClearBufferfv 方法示例
#include "sb7.h"
class my_application : public sb7::application {
public:
void render(double currentTime) override {
//四個引數分別代表紅、綠、藍、透明度
static const GLfloat red[] = { 1.0f, 0.0f, 0.0f, 1.0f };
glClearBufferfv(GL_COLOR, 0, red);
}
};
呼叫方法的主程式(不同平臺的呼叫方法見sb7.h檔案結尾處)
#include <iostream>
#include "1_sb7.cpp"
int CALLBACK WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow) {
my_application* app = new my_application;
app->run(app); //run方法中通過while回圈呼叫我們的render方法
delete app;
return 0;
}
實作效果:

繪制一個點
#include "sb7.h"
class my_application : public sb7::application {
public:
void render(double currentTime) override {
glUseProgram(rendering_program);
glDrawArrays(GL_POINTS, 0, 1);
}
virtual void startup() override {
rendering_program = compile_shaders();
glCreateVertexArrays(1, &vertex_array_object);
glBindVertexArray(vertex_array_object);
}
virtual void shutdown() override {
glDeleteVertexArrays(1, &vertex_array_object);
glDeleteProgram(rendering_program);
glDeleteVertexArrays(1, &vertex_array_object);
}
GLuint compile_shaders() {
GLuint vertex_shader;
GLuint fragment_shader;
GLuint program;
//source code for vertex shader
static const GLchar* vertex_shader_source[] = {
"#version 460 core \n"
" \n"
"void main(void) \n"
"{ \n"
" gl_Position = vec4(0.0f, 0.0f, 0.5f, 1.0f); \n"
"} \n"
};
//source code for fragment shader
static const GLchar* fragment_shader_source[] = {
"#version 460 core \n"
"out vec4 color; \n"
" \n"
"void main(void) \n"
"{ \n "
" color = vec4(0.0f, 0.0f, 1.0f, 1.0f); \n"
"} \n"
};
//create and compile vertex shader
vertex_shader = glCreateShader(GL_VERTEX_SHADER); //glCreateShader創建一個空白的著色器物件
glShaderSource(vertex_shader, 1, vertex_shader_source, NULL); //glShaderSource將著色器源代碼傳遞給著色器物件
glCompileShader(vertex_shader); //對著色器物件中包含的任何我源代碼進行編譯
//create and compile fragment shader
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragment_shader, 1, fragment_shader_source, NULL);
glCompileShader(fragment_shader);
//create program,attach shader to it, and link it
program = glCreateProgram(); //glCreateProgram 創建一個程式物件,我們可將著色器物件附加到該物件上
glAttachShader(program, vertex_shader); //glAttachShader 將一個著色器物件附加到一個程式物件中
glAttachShader(program, fragment_shader);
glLinkProgram(program); //將所有附加到程式物件的著色器物件鏈接在一起
//delete the shader as the program has them now
//洗掉著色器物件的原因是:一旦著色器鏈接到一個程式物件,程式將包含二進制代碼,并不在需要著色器
glDeleteShader(vertex_shader);
glDeleteShader(fragment_shader);
glPointSize(40.0f);
return program;
}
private:
GLuint rendering_program;
GLuint vertex_array_object;
};
運行結果:

未完待續
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/262972.html
標籤:區塊鏈
上一篇:【docker】denied: requested access to the resource is denied
