gpu base + opengl
This commit is contained in:
parent
1d51b3bed9
commit
0aabe8ffac
30
source/hyporo/gpu/buffer.cpp
Normal file
30
source/hyporo/gpu/buffer.cpp
Normal file
@ -0,0 +1,30 @@
|
||||
|
||||
#include "buffer.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu
|
||||
{
|
||||
|
||||
Buffer::Buffer() :
|
||||
Context {DeviceAPI::Unknown},
|
||||
p_type {BufferType::Undefined},
|
||||
p_size {0},
|
||||
p_stride {0}
|
||||
{}
|
||||
|
||||
Buffer::Buffer(DeviceAPI api) :
|
||||
Context {api},
|
||||
p_type {BufferType::Undefined},
|
||||
p_size {0},
|
||||
p_stride {0}
|
||||
{}
|
||||
|
||||
Buffer::~Buffer()
|
||||
{}
|
||||
|
||||
const BufferType Buffer::type() const
|
||||
{
|
||||
return p_type;
|
||||
}
|
||||
|
||||
}
|
47
source/hyporo/gpu/buffer.hpp
Normal file
47
source/hyporo/gpu/buffer.hpp
Normal file
@ -0,0 +1,47 @@
|
||||
#pragma once
|
||||
|
||||
#include "context.hpp"
|
||||
|
||||
#include <string>
|
||||
|
||||
|
||||
namespace hpr::gpu
|
||||
{
|
||||
|
||||
class Buffer : public Context
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
enum class BufferType
|
||||
{
|
||||
Undefined,
|
||||
Vertex,
|
||||
Index,
|
||||
BufferTypeCount
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
BufferType p_type;
|
||||
int p_size;
|
||||
int p_stride;
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
Buffer();
|
||||
|
||||
Buffer(DeviceAPI api);
|
||||
|
||||
virtual ~Buffer();
|
||||
|
||||
// Member functions
|
||||
|
||||
const int size() const;
|
||||
|
||||
const BufferType type() const;
|
||||
};
|
||||
|
||||
} // end namespace hpr::gpu
|
34
source/hyporo/gpu/device.cpp
Normal file
34
source/hyporo/gpu/device.cpp
Normal file
@ -0,0 +1,34 @@
|
||||
|
||||
#include "device.hpp"
|
||||
#include "opengl/device.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu
|
||||
{
|
||||
|
||||
Device::Device() :
|
||||
Context {DeviceAPI::Unknown}
|
||||
{}
|
||||
|
||||
Device::Device(DeviceAPI api) :
|
||||
Context {api}
|
||||
{}
|
||||
|
||||
Device::~Device()
|
||||
{}
|
||||
|
||||
void Device::create(Device **device, DeviceAPI api)
|
||||
{
|
||||
if (device == nullptr)
|
||||
throw "Invalid parameter";
|
||||
if (api == DeviceAPI::Unknown)
|
||||
throw "Invalid parameter";
|
||||
|
||||
*device = nullptr;
|
||||
|
||||
if (api == DeviceAPI::OpenGL)
|
||||
*device = new opengl::Device;
|
||||
else
|
||||
throw "Unsupported device";
|
||||
}
|
||||
}
|
91
source/hyporo/gpu/device.hpp
Normal file
91
source/hyporo/gpu/device.hpp
Normal file
@ -0,0 +1,91 @@
|
||||
#pragma once
|
||||
|
||||
#include "context.hpp"
|
||||
#include "buffer.hpp"
|
||||
#include "shader.hpp"
|
||||
#include "shader_program.hpp"
|
||||
#include "texture.hpp"
|
||||
|
||||
#include <vector>
|
||||
|
||||
|
||||
namespace hpr::gpu
|
||||
{
|
||||
|
||||
class Device : public Context
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
enum class CullMode
|
||||
{
|
||||
Front,
|
||||
Back,
|
||||
None
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
std::vector<Buffer> p_buffers;
|
||||
std::vector<Shader> p_shaders;
|
||||
std::vector<ShaderProgram> p_shaderPrograms;
|
||||
std::vector<Texture> p_textures;
|
||||
|
||||
protected:
|
||||
|
||||
// Constructors
|
||||
|
||||
Device();
|
||||
|
||||
Device(DeviceAPI api);
|
||||
|
||||
virtual ~Device();
|
||||
|
||||
public:
|
||||
|
||||
// Global functions
|
||||
|
||||
static void create(Device** device, DeviceAPI api);
|
||||
|
||||
// Member functions
|
||||
|
||||
// Setup
|
||||
|
||||
virtual bool initialize() = 0;
|
||||
virtual bool destroy() = 0;
|
||||
|
||||
// State
|
||||
|
||||
virtual void faceCulling(bool enableFaceCulling, CullMode faceCullingMode = CullMode::None) = 0;
|
||||
|
||||
// Buffers
|
||||
|
||||
virtual void createVertexBuffer(Buffer **buffer, int size, char* data) = 0;
|
||||
virtual void createIndexBuffer(Buffer **buffer, int size, char* data) = 0;
|
||||
virtual void useVertexBuffer(Buffer* buffer, int stride, int offset);
|
||||
virtual void useIndexBuffer(Buffer* buffer, int offset);
|
||||
virtual bool destroyBuffer(Buffer*& buffer);
|
||||
|
||||
// Shaders
|
||||
|
||||
virtual void createVertexShader(Shader** shader, const std::string& filename, const std::string& label) = 0;
|
||||
virtual void createFragmentShader(Shader** shader, const std::string& filename, const std::string& label) = 0;
|
||||
virtual void createGeometryShader(Shader** shader, const std::string& filename, const std::string& label) = 0;
|
||||
virtual bool destroyShader(Shader*& shader);
|
||||
|
||||
// Shader programs
|
||||
|
||||
virtual void createShaderProgram(ShaderProgram** program) = 0;
|
||||
virtual void attachShader(ShaderProgram* program, Shader* shader);
|
||||
virtual void linkProgram(ShaderProgram* program);
|
||||
virtual void useShaderProgram(ShaderProgram* program);
|
||||
virtual void destroyShaderProgram(ShaderProgram*& program, bool withShaders = false);
|
||||
|
||||
// Textures
|
||||
|
||||
virtual void createTexture(Texture** texture, const std::string& filename) = 0;
|
||||
virtual void useTexture(Texture* texture, int slot);
|
||||
virtual void destroyTexture(Texture*& texture);
|
||||
};
|
||||
|
||||
}
|
28
source/hyporo/gpu/opengl/buffer.cpp
Normal file
28
source/hyporo/gpu/opengl/buffer.cpp
Normal file
@ -0,0 +1,28 @@
|
||||
|
||||
#include "buffer.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu::opengl
|
||||
{
|
||||
|
||||
Buffer::Buffer() :
|
||||
gpu::Buffer(DeviceAPI::OpenGL),
|
||||
p_bufferIndex {0},
|
||||
p_vertexArrayIndex {0}
|
||||
{}
|
||||
|
||||
Buffer::~Buffer()
|
||||
{}
|
||||
|
||||
const int Buffer::target() const
|
||||
{
|
||||
switch (p_type)
|
||||
{
|
||||
case BufferType::Vertex:
|
||||
return GL_ARRAY_BUFFER;
|
||||
case BufferType::Index:
|
||||
return GL_ELEMENT_INDEX_BUFFER;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
30
source/hyporo/gpu/opengl/buffer.hpp
Normal file
30
source/hyporo/gpu/opengl/buffer.hpp
Normal file
@ -0,0 +1,30 @@
|
||||
#pragma once
|
||||
|
||||
#include "../buffer.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu::opengl
|
||||
{
|
||||
|
||||
class Buffer : public gpu::Buffer
|
||||
{
|
||||
friend class Device;
|
||||
|
||||
protected:
|
||||
unsigned int p_bufferIndex;
|
||||
unsigned int p_vertexArrayIndex;
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
Buffer();
|
||||
|
||||
virtual ~Buffer();
|
||||
|
||||
// Member functions
|
||||
|
||||
const int target() const;
|
||||
};
|
||||
|
||||
}
|
5
source/hyporo/gpu/opengl/context.cpp
Normal file
5
source/hyporo/gpu/opengl/context.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
//
|
||||
// Created by L-Nafaryus on 10/3/2022.
|
||||
//
|
||||
|
||||
#include "context.hpp"
|
8
source/hyporo/gpu/opengl/context.hpp
Normal file
8
source/hyporo/gpu/opengl/context.hpp
Normal file
@ -0,0 +1,8 @@
|
||||
//
|
||||
// Created by L-Nafaryus on 10/3/2022.
|
||||
//
|
||||
|
||||
#ifndef HYPORO_CONTEXT_HPP
|
||||
#define HYPORO_CONTEXT_HPP
|
||||
|
||||
#endif //HYPORO_CONTEXT_HPP
|
21
source/hyporo/gpu/opengl/device.cpp
Normal file
21
source/hyporo/gpu/opengl/device.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
|
||||
#include "device.hpp"
|
||||
#include "buffer.hpp
|
||||
#include "shader.hpp"
|
||||
#include "shader_program.hpp"
|
||||
#include "texture.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu::opengl
|
||||
{
|
||||
|
||||
Device::Device() :
|
||||
gpu::Device {DeviceAPI::OpenGL},
|
||||
p_isInitialized {false}
|
||||
{}
|
||||
|
||||
Device::~Device()
|
||||
{}
|
||||
|
||||
|
||||
}
|
27
source/hyporo/gpu/opengl/device.hpp
Normal file
27
source/hyporo/gpu/opengl/device.hpp
Normal file
@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
#include "../device.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu::opengl
|
||||
{
|
||||
|
||||
class Device : public gpu::Device
|
||||
{
|
||||
|
||||
protected:
|
||||
|
||||
bool p_isInitialized;
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
Device();
|
||||
|
||||
~Device();
|
||||
|
||||
|
||||
};
|
||||
|
||||
}
|
19
source/hyporo/gpu/opengl/shader.cpp
Normal file
19
source/hyporo/gpu/opengl/shader.cpp
Normal file
@ -0,0 +1,19 @@
|
||||
//
|
||||
// Created by L-Nafaryus on 10/3/2022.
|
||||
//
|
||||
|
||||
#include "shader.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu::opengl
|
||||
{
|
||||
|
||||
Shader::Shader() :
|
||||
gpu::Shader(DeviceAPI::OpenGL),
|
||||
p_shaderIndex {0}
|
||||
{}
|
||||
|
||||
Shader::~Shader()
|
||||
{}
|
||||
|
||||
}
|
26
source/hyporo/gpu/opengl/shader.hpp
Normal file
26
source/hyporo/gpu/opengl/shader.hpp
Normal file
@ -0,0 +1,26 @@
|
||||
|
||||
#include "../shader.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu::opengl
|
||||
{
|
||||
|
||||
class Shader : public gpu::Shader
|
||||
{
|
||||
friend class Device;
|
||||
|
||||
protected:
|
||||
|
||||
unsigned int p_shaderIndex;
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
Shader();
|
||||
|
||||
virtual ~Shader();
|
||||
|
||||
};
|
||||
|
||||
}
|
22
source/hyporo/gpu/opengl/shader_program.cpp
Normal file
22
source/hyporo/gpu/opengl/shader_program.cpp
Normal file
@ -0,0 +1,22 @@
|
||||
|
||||
#include "shader_program.hpp"
|
||||
#include "shader.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu::opengl
|
||||
{
|
||||
|
||||
ShaderProgram::ShaderProgram() :
|
||||
gpu::ShaderProgram {DeviceAPI::OpenGL},
|
||||
p_shaderProgramIndex {0}
|
||||
{}
|
||||
|
||||
ShaderProgram::~ShaderProgram()
|
||||
{}
|
||||
|
||||
Shader *ShaderProgram::shader(gpu::Shader::ShaderType type)
|
||||
{
|
||||
return static_cast<opengl::Shader*>(p_slots[(size_t)type]);
|
||||
}
|
||||
|
||||
}
|
35
source/hyporo/gpu/opengl/shader_program.hpp
Normal file
35
source/hyporo/gpu/opengl/shader_program.hpp
Normal file
@ -0,0 +1,35 @@
|
||||
#pragma once
|
||||
|
||||
#include "../shader_program.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu::opengl
|
||||
{
|
||||
|
||||
// Forward declarations
|
||||
|
||||
class Shader;
|
||||
|
||||
//
|
||||
|
||||
class ShaderProgram : public gpu::ShaderProgram
|
||||
{
|
||||
friend class Device;
|
||||
|
||||
protected:
|
||||
|
||||
unsigned int p_shaderProgramIndex;
|
||||
|
||||
public:
|
||||
|
||||
ShaderProgram();
|
||||
|
||||
~ShaderProgram();
|
||||
|
||||
protected:
|
||||
|
||||
Shader* shader(gpu::Shader::ShaderType type);
|
||||
|
||||
};
|
||||
|
||||
}
|
16
source/hyporo/gpu/opengl/texture.cpp
Normal file
16
source/hyporo/gpu/opengl/texture.cpp
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
#include "texture.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu::opengl
|
||||
{
|
||||
|
||||
Texture::Texture() :
|
||||
gpu::Texture {DeviceAPI::OpenGL},
|
||||
p_textureIndex {0}
|
||||
{}
|
||||
|
||||
Texture::~Texture()
|
||||
{}
|
||||
|
||||
}
|
25
source/hyporo/gpu/opengl/texture.hpp
Normal file
25
source/hyporo/gpu/opengl/texture.hpp
Normal file
@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include "../texture.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu::opengl
|
||||
{
|
||||
|
||||
class Texture : public gpu::Texture
|
||||
{
|
||||
friend class Device;
|
||||
|
||||
protected:
|
||||
|
||||
unsigned int p_textureIndex;
|
||||
|
||||
public:
|
||||
|
||||
Texture();
|
||||
|
||||
~Texture();
|
||||
|
||||
};
|
||||
|
||||
}
|
@ -9,7 +9,7 @@
|
||||
namespace hpr::gpu
|
||||
{
|
||||
|
||||
class ShaderProgram : Context
|
||||
class ShaderProgram : public Context
|
||||
{
|
||||
|
||||
protected:
|
||||
|
26
source/hyporo/gpu/texture.cpp
Normal file
26
source/hyporo/gpu/texture.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
|
||||
#include "texture.hpp"
|
||||
|
||||
|
||||
namespace hpr::gpu
|
||||
{
|
||||
|
||||
Texture::Texture() :
|
||||
Context {DeviceAPI::Unknown},
|
||||
p_filename {},
|
||||
p_width {0},
|
||||
p_height {0}
|
||||
{}
|
||||
|
||||
|
||||
Texture::Texture(DeviceAPI api) :
|
||||
Context {api},
|
||||
p_filename {},
|
||||
p_width {0},
|
||||
p_height {0}
|
||||
{}
|
||||
|
||||
Texture::~Texture()
|
||||
{}
|
||||
|
||||
}
|
38
source/hyporo/gpu/texture.hpp
Normal file
38
source/hyporo/gpu/texture.hpp
Normal file
@ -0,0 +1,38 @@
|
||||
#pragma once
|
||||
|
||||
#include "context.hpp"
|
||||
|
||||
#include <string>
|
||||
|
||||
|
||||
namespace hpr::gpu
|
||||
{
|
||||
|
||||
class Texture : public Context
|
||||
{
|
||||
protected:
|
||||
|
||||
std::string p_filename;
|
||||
int p_width;
|
||||
int p_height;
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
Texture();
|
||||
|
||||
Texture(DeviceAPI api);
|
||||
|
||||
virtual ~Texture();
|
||||
|
||||
// Member functions
|
||||
|
||||
const std::string filename() const();
|
||||
|
||||
const int width() const;
|
||||
|
||||
const int height() const;
|
||||
};
|
||||
|
||||
} // end namespace hpr::gpu
|
Loading…
Reference in New Issue
Block a user