Added Texture
This commit is contained in:
parent
4f1ea8327a
commit
933d3f1fe9
@ -216,6 +216,7 @@
|
||||
<ClCompile Include="src\Renderer\IndexBuffer.cpp" />
|
||||
<ClCompile Include="src\Renderer\Renderer.cpp" />
|
||||
<ClCompile Include="src\Renderer\Shader.cpp" />
|
||||
<ClCompile Include="src\Renderer\Texture.cpp" />
|
||||
<ClCompile Include="src\Renderer\VertexArray.cpp" />
|
||||
<ClCompile Include="src\Renderer\VertexBuffer.cpp" />
|
||||
<ClCompile Include="src\Utility.cpp" />
|
||||
@ -234,6 +235,7 @@
|
||||
<ClInclude Include="src\include\NothinFancy.h" />
|
||||
<ClInclude Include="src\include\Renderer.h" />
|
||||
<ClInclude Include="src\include\Shader.h" />
|
||||
<ClInclude Include="src\include\Texture.h" />
|
||||
<ClInclude Include="src\include\Utility.h" />
|
||||
<ClInclude Include="src\include\VertexArray.h" />
|
||||
<ClInclude Include="src\include\VertexBuffer.h" />
|
||||
|
@ -51,6 +51,9 @@
|
||||
<ClCompile Include="src\Renderer\Drawable\Entity.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Renderer\Texture.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\include\Config.h">
|
||||
@ -101,6 +104,9 @@
|
||||
<ClInclude Include="src\include\Entity.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\include\Texture.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Natvis Include="NatvisFile.natvis" />
|
||||
|
@ -2,8 +2,10 @@
|
||||
|
||||
out vec4 color;
|
||||
|
||||
uniform sampler2D tex;
|
||||
|
||||
in vec2 texCoord;
|
||||
|
||||
void main() {
|
||||
color = vec4(1.0, 0.0, 1.0, 1.0);
|
||||
color = texture(tex, texCoord);
|
||||
}
|
||||
|
@ -10,9 +10,9 @@ namespace nf {
|
||||
|
||||
}
|
||||
|
||||
void Entity::create(const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount) {
|
||||
void Entity::create(const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount, const void* textureCoordinatesBufferData, size_t textureCoordinatesBufferSize, const char* textureName) {
|
||||
m_model = new Model;
|
||||
m_model->create(vertexBufferData, vertexBufferSize, indexBufferData, indexBufferCount);
|
||||
m_model->create(vertexBufferData, vertexBufferSize, indexBufferData, indexBufferCount, textureCoordinatesBufferData, textureCoordinatesBufferSize, textureName);
|
||||
}
|
||||
|
||||
void Entity::setPosition(float x, float y, float z) {
|
||||
|
@ -6,11 +6,19 @@ namespace nf {
|
||||
Model::Model() {
|
||||
}
|
||||
|
||||
void Model::create(const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount) {
|
||||
void Model::create(const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount, const void* textureCoordinatesBufferData, size_t textureCoordinatesBufferSize, const char* textureName) {
|
||||
m_vao = new VertexArray;
|
||||
m_vao->addBuffer(vertexBufferData, vertexBufferSize);
|
||||
m_vao->push<float>(3);
|
||||
m_vao->push<float>(2);
|
||||
//TODO: Change this to 3
|
||||
m_vao->finishBufferLayout();
|
||||
if (textureCoordinatesBufferData && textureCoordinatesBufferSize && textureName) {
|
||||
m_vao->addBuffer(textureCoordinatesBufferData, textureCoordinatesBufferSize);
|
||||
m_vao->push<float>(2);
|
||||
m_vao->finishBufferLayout();
|
||||
m_texture = new Texture;
|
||||
m_texture->create(textureName);
|
||||
}
|
||||
m_ib = new IndexBuffer(indexBufferData, indexBufferCount);
|
||||
}
|
||||
|
||||
@ -18,10 +26,12 @@ namespace nf {
|
||||
if (m_vao == nullptr)
|
||||
Error("Tried to bind uninitialized model!");
|
||||
m_vao->bind();
|
||||
if (m_texture)
|
||||
m_texture->bind();
|
||||
m_ib->bind();
|
||||
}
|
||||
|
||||
Model::~Model() {
|
||||
|
||||
delete m_texture;
|
||||
}
|
||||
}
|
@ -11,7 +11,7 @@ namespace nf {
|
||||
}
|
||||
|
||||
void IndexBuffer::bind() const {
|
||||
glBindBuffer(GL_ARRAY_BUFFER, m_id);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_id);
|
||||
}
|
||||
|
||||
unsigned int IndexBuffer::getCount() {
|
||||
|
@ -44,10 +44,7 @@ namespace nf {
|
||||
}
|
||||
|
||||
void Shader::bind() {
|
||||
if (m_id != Shader::current) {
|
||||
glUseProgram(m_id);
|
||||
Shader::current = m_id;
|
||||
}
|
||||
glUseProgram(m_id);
|
||||
}
|
||||
|
||||
void Shader::setUniform(const char* name, glm::mat4& data) {
|
||||
@ -66,6 +63,4 @@ namespace nf {
|
||||
Shader::~Shader() {
|
||||
glDeleteProgram(m_id);
|
||||
}
|
||||
|
||||
unsigned int Shader::current;
|
||||
}
|
36
NothinFancy/src/Renderer/Texture.cpp
Normal file
36
NothinFancy/src/Renderer/Texture.cpp
Normal file
@ -0,0 +1,36 @@
|
||||
#include "Texture.h"
|
||||
|
||||
#include "GL/glew.h"
|
||||
#define STB_IMAGE_IMPLEMENTATION
|
||||
#include "stb_image.h"
|
||||
|
||||
#include "Utility.h"
|
||||
|
||||
namespace nf {
|
||||
Texture::Texture() {
|
||||
glGenTextures(1, &m_id);
|
||||
}
|
||||
|
||||
void Texture::create(const char* textureName) {
|
||||
int width, height, nChannels;
|
||||
stbi_set_flip_vertically_on_load(true);
|
||||
unsigned char* texture = stbi_load(textureName, &width, &height, &nChannels, 0);
|
||||
//TODO: Load from memory
|
||||
if (!texture)
|
||||
Error("Texture failed to load from memory!");
|
||||
glBindTexture(GL_TEXTURE_2D, m_id);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture);
|
||||
//glGenerateMipmap(GL_TEXTURE_2D);
|
||||
stbi_image_free(texture);
|
||||
}
|
||||
|
||||
void Texture::bind() {
|
||||
glBindTexture(GL_TEXTURE_2D, m_id);
|
||||
}
|
||||
|
||||
Texture::~Texture() {
|
||||
glDeleteTextures(1, &m_id);
|
||||
}
|
||||
}
|
@ -11,7 +11,7 @@ namespace nf {
|
||||
public:
|
||||
Entity();
|
||||
|
||||
void create(const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount);
|
||||
void create(const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount, const void* textureCoordinatesBufferData = nullptr, size_t textureCoordinatesBufferSize = 0, const char* textureName = nullptr);
|
||||
//TODO: Do this using loaded assets somehow
|
||||
void setPosition(float x, float y, float z);
|
||||
void setRotation(float x, float y, float z);
|
||||
|
@ -5,17 +5,18 @@
|
||||
#endif
|
||||
|
||||
#include "Drawable.h"
|
||||
#include "Texture.h"
|
||||
|
||||
namespace nf {
|
||||
class Model : public Drawable {
|
||||
public:
|
||||
Model();
|
||||
|
||||
void create(const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount);
|
||||
void create(const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount, const void* textureCoordinates = nullptr, size_t textureCoordinatesBufferSize = 0, const char* textureName = nullptr);
|
||||
void bind() override;
|
||||
|
||||
~Model();
|
||||
private:
|
||||
|
||||
Texture* m_texture;
|
||||
};
|
||||
}
|
@ -22,7 +22,7 @@ namespace nf {
|
||||
public:
|
||||
Entity();
|
||||
|
||||
void create(const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount);
|
||||
void create(const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount, const void* textureCoordinatesBufferData = nullptr, size_t textureCoordinatesBufferSize = 0, const char* textureName = nullptr);
|
||||
//TODO: Do this using loaded assets somehow
|
||||
void setPosition(float x, float y, float z);
|
||||
void setRotation(float x, float y, float z);
|
||||
|
@ -12,7 +12,6 @@ namespace nf {
|
||||
|
||||
void bind();
|
||||
void setUniform(const char* name, glm::mat4& data);
|
||||
static unsigned int current;
|
||||
|
||||
~Shader();
|
||||
private:
|
||||
|
15
NothinFancy/src/include/Texture.h
Normal file
15
NothinFancy/src/include/Texture.h
Normal file
@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
namespace nf {
|
||||
class Texture {
|
||||
public:
|
||||
Texture();
|
||||
|
||||
void create(const char* textureName);
|
||||
void bind();
|
||||
|
||||
~Texture();
|
||||
private:
|
||||
unsigned int m_id;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user