add skybox, move assets
This commit is contained in:
parent
e16915428c
commit
0f6ebbc2d4
@ -8,8 +8,8 @@ if(CMAKE_BUILD_TYPE MATCHES DEBUG)
|
|||||||
set(CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}")
|
set(CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
SET(CMAKE_C_FLAGS_RELEASE "-Ofast -msse4 -DNDEBUG")
|
SET(CMAKE_C_FLAGS_RELEASE "-Ofast -msse4 -msse2 -DNDEBUG")
|
||||||
SET(CMAKE_CXX_FLAGS_RELEASE "-Ofast -msse4 -DNDEBUG")
|
SET(CMAKE_CXX_FLAGS_RELEASE "-Ofast -msse4 -msse2 -DNDEBUG")
|
||||||
|
|
||||||
if(CMAKE_BUILD_TYPE MATCHES RELEASE)
|
if(CMAKE_BUILD_TYPE MATCHES RELEASE)
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
||||||
|
12
assets/shader/skybox.fragment.glsl
Normal file
12
assets/shader/skybox.fragment.glsl
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec3 TexCoord0;
|
||||||
|
|
||||||
|
out vec4 color;
|
||||||
|
|
||||||
|
uniform samplerCube tCubemap;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
color = texture(tCubemap, TexCoord0);
|
||||||
|
}
|
14
assets/shader/skybox.vertex.glsl
Normal file
14
assets/shader/skybox.vertex.glsl
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec3 vPosition;
|
||||||
|
|
||||||
|
uniform mat4 MVP;
|
||||||
|
|
||||||
|
out vec3 TexCoord0;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec4 WVP_Pos = MVP * vec4(vPosition, 1.0);
|
||||||
|
gl_Position = WVP_Pos.xyww;
|
||||||
|
TexCoord0 = vPosition;
|
||||||
|
}
|
@ -20,7 +20,7 @@ void main(){
|
|||||||
// Light emission properties
|
// Light emission properties
|
||||||
// You probably want to put them as uniforms
|
// You probably want to put them as uniforms
|
||||||
vec3 LightColor = vec3(1,1,1);
|
vec3 LightColor = vec3(1,1,1);
|
||||||
float LightPower = 400.0f;
|
float LightPower = 200.0f;
|
||||||
|
|
||||||
// Material properties
|
// Material properties
|
||||||
vec3 MaterialDiffuseColor = texture( tAlbedo, UV ).rgb;
|
vec3 MaterialDiffuseColor = texture( tAlbedo, UV ).rgb;
|
BIN
assets/textures/background_back6.jpg
Normal file
BIN
assets/textures/background_back6.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 78 KiB |
BIN
assets/textures/background_bottom4.jpg
Normal file
BIN
assets/textures/background_bottom4.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 83 KiB |
BIN
assets/textures/background_front5.jpg
Normal file
BIN
assets/textures/background_front5.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 72 KiB |
BIN
assets/textures/background_left2.jpg
Normal file
BIN
assets/textures/background_left2.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 71 KiB |
BIN
assets/textures/background_right1.jpg
Normal file
BIN
assets/textures/background_right1.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 77 KiB |
BIN
assets/textures/background_top3.jpg
Normal file
BIN
assets/textures/background_top3.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 83 KiB |
@ -1,12 +0,0 @@
|
|||||||
#version 330
|
|
||||||
|
|
||||||
in vec3 TexCoord0;
|
|
||||||
|
|
||||||
out vec4 FragColor;
|
|
||||||
|
|
||||||
uniform samplerCube gCubemapTexture;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
FragColor = texture(gCubemapTexture, TexCoord0);
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
#version 330
|
|
||||||
|
|
||||||
in vec3 Position;
|
|
||||||
|
|
||||||
uniform mat4 gWVP;
|
|
||||||
|
|
||||||
out vec3 TexCoord0;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
vec4 WVP_Pos = gWVP * vec4(Position, 1.0);
|
|
||||||
gl_Position = WVP_Pos.xyww;
|
|
||||||
TexCoord0 = Position;
|
|
||||||
}
|
|
@ -126,8 +126,10 @@ void Application::init() {
|
|||||||
|
|
||||||
loadShader();
|
loadShader();
|
||||||
glMesh.create();
|
glMesh.create();
|
||||||
glMesh.update(vPositionLoc, vNormalLoc, vTexCoordLoc);
|
glMesh.update(programId);
|
||||||
generateAsteroid();
|
generateAsteroid();
|
||||||
|
|
||||||
|
skybox.Load("background");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::shutdown() {
|
void Application::shutdown() {
|
||||||
@ -214,7 +216,7 @@ void Application::generateAsteroid() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (meshProgress.begin("Generate Patched", 1)) {
|
if (meshProgress.begin("Generate Patched", 1)) {
|
||||||
mesh = polygonizer.mesh.createPatched(0.9);
|
mesh = polygonizer.mesh.createPatched(0.8);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (meshProgress.begin("Save Patched", 1)) {
|
if (meshProgress.begin("Save Patched", 1)) {
|
||||||
@ -253,10 +255,6 @@ void Application::loadShader() {
|
|||||||
GLCK(
|
GLCK(
|
||||||
LightPosition_worldspaceloc = glGetUniformLocation(programId, "LightPosition_worldspace"))
|
LightPosition_worldspaceloc = glGetUniformLocation(programId, "LightPosition_worldspace"))
|
||||||
|
|
||||||
GLCK(vPositionLoc = glGetAttribLocation(programId, "vPosition"))
|
|
||||||
GLCK(vTexCoordLoc = glGetAttribLocation(programId, "vTexCoord"))
|
|
||||||
GLCK(vNormalLoc = glGetAttribLocation(programId, "vNormal"))
|
|
||||||
|
|
||||||
GLCK(tAlbedoLoc = glGetAttribLocation(programId, "tAlbedo"))
|
GLCK(tAlbedoLoc = glGetAttribLocation(programId, "tAlbedo"))
|
||||||
GLCK(tNormalLoc = glGetAttribLocation(programId, "tNormal"))
|
GLCK(tNormalLoc = glGetAttribLocation(programId, "tNormal"))
|
||||||
GLCK(tRoughnessLoc = glGetAttribLocation(programId, "tRoughness"))
|
GLCK(tRoughnessLoc = glGetAttribLocation(programId, "tRoughness"))
|
||||||
@ -281,9 +279,7 @@ void Application::renderMesh() {
|
|||||||
glMesh.render();
|
glMesh.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::prepareShader() {
|
void Application::updateMatrices() {
|
||||||
glm::mat4 view;
|
|
||||||
|
|
||||||
double mouseX, mouseY;
|
double mouseX, mouseY;
|
||||||
glfwGetCursorPos(window, &mouseX, &mouseY);
|
glfwGetCursorPos(window, &mouseX, &mouseY);
|
||||||
|
|
||||||
@ -333,10 +329,12 @@ void Application::prepareShader() {
|
|||||||
lastMouseX = mouseX;
|
lastMouseX = mouseX;
|
||||||
lastMouseY = mouseY;
|
lastMouseY = mouseY;
|
||||||
|
|
||||||
glm::mat4 perspective = glm::perspective(glm::radians(45.0f),
|
perspective = glm::perspective(glm::radians(45.0f),
|
||||||
(float) width / (float) height, 0.1f, 100.0f);
|
(float) width / (float) height, 0.1f, 100.0f);
|
||||||
glm::mat4 mvp = perspective * view * modelTrafo;
|
mvp = perspective * view * modelTrafo;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Application::prepareShader() {
|
||||||
GLCK(glUseProgram(programId))
|
GLCK(glUseProgram(programId))
|
||||||
if (MVPloc >= 0) {
|
if (MVPloc >= 0) {
|
||||||
GLCK(glUniformMatrix4fv(MVPloc, 1, GL_FALSE, glm::value_ptr(mvp)))
|
GLCK(glUniformMatrix4fv(MVPloc, 1, GL_FALSE, glm::value_ptr(mvp)))
|
||||||
@ -421,7 +419,7 @@ void Application::gui() {
|
|||||||
ImGui::Begin("Rendering");
|
ImGui::Begin("Rendering");
|
||||||
if (ImGui::Button("Reload Shader")) {
|
if (ImGui::Button("Reload Shader")) {
|
||||||
loadShader();
|
loadShader();
|
||||||
glMesh.update(vPositionLoc, vNormalLoc, vTexCoordLoc);
|
glMesh.update(programId);
|
||||||
}
|
}
|
||||||
if (ImGui::Button("Wireframe"))
|
if (ImGui::Button("Wireframe"))
|
||||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||||
@ -458,9 +456,10 @@ void Application::run() {
|
|||||||
uploadTexture();
|
uploadTexture();
|
||||||
textureUploadRequest = false;
|
textureUploadRequest = false;
|
||||||
}
|
}
|
||||||
|
updateMatrices();
|
||||||
prepareShader();
|
prepareShader();
|
||||||
renderMesh();
|
renderMesh();
|
||||||
|
skybox.Render(mvp);
|
||||||
ImGui::Render();
|
ImGui::Render();
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "Polygoniser.h"
|
#include "Polygoniser.h"
|
||||||
#include "TextureMapper.h"
|
#include "TextureMapper.h"
|
||||||
#include "ProgressMonitor.h"
|
#include "ProgressMonitor.h"
|
||||||
|
#include "SkyBox.h"
|
||||||
#include "gl.h"
|
#include "gl.h"
|
||||||
|
|
||||||
#include <glm/mat4x4.hpp>
|
#include <glm/mat4x4.hpp>
|
||||||
@ -54,6 +55,11 @@ class Application {
|
|||||||
bool meshUploadRequest, textureUploadRequest;
|
bool meshUploadRequest, textureUploadRequest;
|
||||||
|
|
||||||
void toogleFpsMode();
|
void toogleFpsMode();
|
||||||
|
|
||||||
|
glm::mat4 perspective, view, mvp;
|
||||||
|
|
||||||
|
SkyBox skybox;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Application();
|
Application();
|
||||||
|
|
||||||
@ -86,6 +92,7 @@ public:
|
|||||||
|
|
||||||
void renderMesh();
|
void renderMesh();
|
||||||
|
|
||||||
|
void updateMatrices();
|
||||||
void prepareShader();
|
void prepareShader();
|
||||||
|
|
||||||
void gui();
|
void gui();
|
||||||
|
@ -310,7 +310,6 @@ Mesh Mesh::createPatched(float threshold) const {
|
|||||||
}
|
}
|
||||||
mesh.indices.push_back(idx);
|
mesh.indices.push_back(idx);
|
||||||
}
|
}
|
||||||
printf("\n");
|
|
||||||
}
|
}
|
||||||
return mesh;
|
return mesh;
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ GLuint loadProgram(const string &name) {
|
|||||||
|
|
||||||
// Read the Vertex Shader code from the file
|
// Read the Vertex Shader code from the file
|
||||||
string VertexShaderCode;
|
string VertexShaderCode;
|
||||||
string vertex_file_path = "shader/" + name + ".vertex.glsl";
|
string vertex_file_path = "assets/shader/" + name + ".vertex.glsl";
|
||||||
ifstream VertexShaderStream(vertex_file_path, ios::in);
|
ifstream VertexShaderStream(vertex_file_path, ios::in);
|
||||||
if (VertexShaderStream.is_open()) {
|
if (VertexShaderStream.is_open()) {
|
||||||
string Line = "";
|
string Line = "";
|
||||||
@ -29,7 +29,7 @@ GLuint loadProgram(const string &name) {
|
|||||||
|
|
||||||
// Read the Fragment Shader code from the file
|
// Read the Fragment Shader code from the file
|
||||||
string FragmentShaderCode;
|
string FragmentShaderCode;
|
||||||
string fragment_file_path = "shader/" + name + ".fragment.glsl";
|
string fragment_file_path = "assets/shader/" + name + ".fragment.glsl";
|
||||||
ifstream FragmentShaderStream(fragment_file_path, ios::in);
|
ifstream FragmentShaderStream(fragment_file_path, ios::in);
|
||||||
if (FragmentShaderStream.is_open()) {
|
if (FragmentShaderStream.is_open()) {
|
||||||
string Line = "";
|
string Line = "";
|
||||||
|
@ -3,12 +3,13 @@
|
|||||||
|
|
||||||
#include <glad/glad.h>
|
#include <glad/glad.h>
|
||||||
#include <stb_image.h>
|
#include <stb_image.h>
|
||||||
|
#include <glm/gtc/type_ptr.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
SkyBox::SkyBox() :
|
SkyBox::SkyBox() :
|
||||||
textureId(GL_INVALID_INDEX), programId(GL_INVALID_INDEX) {
|
textureId(GL_INVALID_INDEX), programId(GL_INVALID_INDEX), textureLoc(-1) {
|
||||||
glGenTextures(1, &textureId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SkyBox::~SkyBox() {
|
SkyBox::~SkyBox() {
|
||||||
@ -16,25 +17,70 @@ SkyBox::~SkyBox() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool SkyBox::Load(const std::string basename) {
|
bool SkyBox::Load(const std::string basename) {
|
||||||
|
glGenTextures(1, &textureId);
|
||||||
|
|
||||||
|
float extent = 10;
|
||||||
|
mesh.positions.clear();
|
||||||
|
mesh.positions.push_back(glm::vec3(-extent, -extent, -extent));
|
||||||
|
mesh.positions.push_back(glm::vec3(-extent, -extent, extent));
|
||||||
|
mesh.positions.push_back(glm::vec3(extent, -extent, extent));
|
||||||
|
mesh.positions.push_back(glm::vec3(extent, -extent, -extent));
|
||||||
|
|
||||||
|
mesh.positions.push_back(glm::vec3(-extent, extent, -extent));
|
||||||
|
mesh.positions.push_back(glm::vec3(-extent, extent, extent));
|
||||||
|
mesh.positions.push_back(glm::vec3(extent, extent, extent));
|
||||||
|
mesh.positions.push_back(glm::vec3(extent, extent, -extent));
|
||||||
|
|
||||||
|
mesh.indices.clear();
|
||||||
|
// bottom
|
||||||
|
mesh.indices.push_back(glm::uvec3(1, 0, 2));
|
||||||
|
mesh.indices.push_back(glm::uvec3(2, 0, 3));
|
||||||
|
// back
|
||||||
|
mesh.indices.push_back(glm::uvec3(5, 2, 6));
|
||||||
|
mesh.indices.push_back(glm::uvec3(1, 2, 5));
|
||||||
|
// front
|
||||||
|
mesh.indices.push_back(glm::uvec3(3, 4, 7));
|
||||||
|
mesh.indices.push_back(glm::uvec3(3, 0, 4));
|
||||||
|
// left
|
||||||
|
mesh.indices.push_back(glm::uvec3(6, 3, 7));
|
||||||
|
mesh.indices.push_back(glm::uvec3(2, 3, 6));
|
||||||
|
// right
|
||||||
|
mesh.indices.push_back(glm::uvec3(0, 1, 4));
|
||||||
|
mesh.indices.push_back(glm::uvec3(4, 1, 5));
|
||||||
|
// top
|
||||||
|
mesh.indices.push_back(glm::uvec3(5, 6, 4));
|
||||||
|
mesh.indices.push_back(glm::uvec3(6, 7, 4));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_CUBE_MAP, textureId);
|
glBindTexture(GL_TEXTURE_CUBE_MAP, textureId);
|
||||||
|
|
||||||
Load(GL_TEXTURE_CUBE_MAP_POSITIVE_X, basename + "_right1.png");
|
Load(GL_TEXTURE_CUBE_MAP_POSITIVE_X, "assets/textures/" + basename + "_right1.jpg");
|
||||||
Load(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, basename + "_left2.png");
|
Load(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, "assets/textures/" + basename + "_left2.jpg");
|
||||||
Load(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, basename + "_top3.png");
|
Load(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, "assets/textures/" + basename + "_top3.jpg");
|
||||||
Load(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, basename + "_bottom4.png");
|
Load(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, "assets/textures/" + basename + "_bottom4.jpg");
|
||||||
Load(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, basename + "_front5.png");
|
Load(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, "assets/textures/" + basename + "_front5.jpg");
|
||||||
Load(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, basename + "_back6.png");
|
Load(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, "assets/textures/" + basename + "_back6.jpg");
|
||||||
|
|
||||||
programId = loadProgram("skybox");
|
programId = loadProgram("skybox");
|
||||||
|
|
||||||
|
GLCK(textureLoc = glGetAttribLocation(programId, "tCubemap"))
|
||||||
|
GLCK(MVPloc = glGetUniformLocation(programId, "MVP"))
|
||||||
|
|
||||||
|
glMesh.create();
|
||||||
|
glMesh.update(programId);
|
||||||
|
glMesh.upload(mesh);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SkyBox::Load(GLuint target, const std::string filename) {
|
bool SkyBox::Load(GLuint target, const std::string filename) {
|
||||||
int x, y, comp;
|
int x, y, comp;
|
||||||
unsigned char *data = stbi_load(filename.c_str(), &x, &y, &comp, 4);
|
printf ("start\n");
|
||||||
|
unsigned char *data = stbi_load(filename.c_str(), &x, &y, &comp, 0);
|
||||||
|
printf ("end\n");
|
||||||
|
|
||||||
glTexImage2D(target, 0, GL_RGBA, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
|
glTexImage2D(target, 0, GL_RGB, x, y, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
|
||||||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S,
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S,
|
||||||
@ -48,7 +94,7 @@ bool SkyBox::Load(GLuint target, const std::string filename) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SkyBox::Render() {
|
void SkyBox::Render(glm::mat4 mvp) {
|
||||||
GLint OldCullFaceMode;
|
GLint OldCullFaceMode;
|
||||||
glGetIntegerv(GL_CULL_FACE_MODE, &OldCullFaceMode);
|
glGetIntegerv(GL_CULL_FACE_MODE, &OldCullFaceMode);
|
||||||
GLint OldDepthFuncMode;
|
GLint OldDepthFuncMode;
|
||||||
@ -67,13 +113,17 @@ void SkyBox::Render() {
|
|||||||
p.SetPerspectiveProj(m_persProjInfo);
|
p.SetPerspectiveProj(m_persProjInfo);
|
||||||
m_pSkyboxTechnique->SetWVP(p.GetWVPTrans());
|
m_pSkyboxTechnique->SetWVP(p.GetWVPTrans());
|
||||||
m_pCubemapTex->Bind(GL_TEXTURE0);
|
m_pCubemapTex->Bind(GL_TEXTURE0);
|
||||||
m_pMesh->Render();
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
GLCK(glUseProgram(programId));
|
||||||
|
mvp[3] = glm::vec4(0, 0, 0, 1);
|
||||||
|
GLCK(glUniformMatrix4fv(MVPloc, 1, GL_FALSE, glm::value_ptr(mvp)))
|
||||||
|
|
||||||
|
GLCK(glUniform1i(textureLoc, 0))
|
||||||
|
GLCK(glActiveTexture(GL_TEXTURE0))
|
||||||
|
GLCK(glBindTexture(GL_TEXTURE_CUBE_MAP, textureId))
|
||||||
|
|
||||||
|
glMesh.render();
|
||||||
glCullFace(OldCullFaceMode);
|
glCullFace(OldCullFaceMode);
|
||||||
glDepthFunc(OldDepthFuncMode);
|
glDepthFunc(OldDepthFuncMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SkyBox::Bind(GLenum unit) {
|
|
||||||
glActiveTexture(unit);
|
|
||||||
glBindTexture(GL_TEXTURE_CUBE_MAP, textureId);
|
|
||||||
}
|
|
||||||
|
12
src/SkyBox.h
12
src/SkyBox.h
@ -1,9 +1,13 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <glad/glad.h>
|
#include "gl.h"
|
||||||
|
#include "Mesh.h"
|
||||||
|
|
||||||
|
#include <glm/mat4x4.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
class SkyBox {
|
class SkyBox {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -14,11 +18,13 @@ public:
|
|||||||
bool Load(const std::string basename);
|
bool Load(const std::string basename);
|
||||||
bool Load(GLuint target, const std::string filename);
|
bool Load(GLuint target, const std::string filename);
|
||||||
|
|
||||||
void Bind(GLenum TextureUnit);
|
void Render(glm::mat4 mvp);
|
||||||
|
|
||||||
void Render();
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
std::string fileNames[6];
|
std::string fileNames[6];
|
||||||
GLuint textureId, programId;
|
GLuint textureId, programId;
|
||||||
|
GLint textureLoc, MVPloc;
|
||||||
|
Mesh mesh;
|
||||||
|
GLMesh glMesh;
|
||||||
};
|
};
|
||||||
|
13
src/gl.h
13
src/gl.h
@ -3,6 +3,7 @@
|
|||||||
#include <glad/glad.h>
|
#include <glad/glad.h>
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
#include "Mesh.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
static bool glck(const char* call) {
|
static bool glck(const char* call) {
|
||||||
@ -93,7 +94,7 @@ public:
|
|||||||
|
|
||||||
bool bindVertexAttrib(GLuint id, GLint loc, GLuint size) const {
|
bool bindVertexAttrib(GLuint id, GLint loc, GLuint size) const {
|
||||||
if (loc < 0) {
|
if (loc < 0) {
|
||||||
GLCK(glDisableVertexAttribArray(loc))
|
return false;
|
||||||
} else {
|
} else {
|
||||||
GLCK(glBindBuffer(GL_ARRAY_BUFFER, id))
|
GLCK(glBindBuffer(GL_ARRAY_BUFFER, id))
|
||||||
GLCK(glEnableVertexAttribArray(loc))
|
GLCK(glEnableVertexAttribArray(loc))
|
||||||
@ -104,11 +105,17 @@ public:
|
|||||||
0,// stride
|
0,// stride
|
||||||
(void* ) 0// array buffer offset
|
(void* ) 0// array buffer offset
|
||||||
))
|
))
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update(int vPositionLoc, int vNormalLoc, int vTexCoordLoc) const {
|
}
|
||||||
|
|
||||||
|
void update(int programId) const {
|
||||||
|
int vPositionLoc, vNormalLoc, vTexCoordLoc;
|
||||||
|
GLCK(vPositionLoc = glGetAttribLocation(programId, "vPosition"))
|
||||||
|
GLCK(vTexCoordLoc = glGetAttribLocation(programId, "vTexCoord"))
|
||||||
|
GLCK(vNormalLoc = glGetAttribLocation(programId, "vNormal"))
|
||||||
|
|
||||||
GLCK(glBindVertexArray(vertexArrayId))
|
GLCK(glBindVertexArray(vertexArrayId))
|
||||||
|
|
||||||
bindVertexAttrib(vPositionId, vPositionLoc, 3);
|
bindVertexAttrib(vPositionId, vPositionLoc, 3);
|
||||||
|
Loading…
Reference in New Issue
Block a user