Documenting done.
This commit is contained in:
@ -21,6 +21,62 @@ void RenderPipeline::render() {
|
|||||||
this->renderScene(*this->renderManager.game.scene);
|
this->renderScene(*this->renderManager.game.scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RenderPipeline::renderScene(Scene &scene) {
|
||||||
|
RenderTarget &backBuffer = this->renderManager.getBackBuffer();
|
||||||
|
auto cameras = scene.findComponents<Camera>();
|
||||||
|
std::shared_ptr<Camera> backBufferCamera = nullptr;
|
||||||
|
|
||||||
|
// First, render all non-backbuffer cameras.
|
||||||
|
auto it = cameras.begin();
|
||||||
|
while(it != cameras.end()) {
|
||||||
|
RenderTarget &cameraTarget = (*it)->getRenderTarget();
|
||||||
|
|
||||||
|
// Leave the backbuffer camera(s) to last, so we skip them.
|
||||||
|
if(&cameraTarget == &backBuffer) {
|
||||||
|
backBufferCamera = *it;
|
||||||
|
} else {
|
||||||
|
this->renderSceneCamera(scene, **it);
|
||||||
|
}
|
||||||
|
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now render the backbuffer camera.
|
||||||
|
if(backBufferCamera == nullptr) return;
|
||||||
|
this->renderSceneCamera(scene, *backBufferCamera);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RenderPipeline::renderSceneCamera(Scene &scene, Camera &camera) {
|
||||||
|
RenderTarget &renderTarget = camera.getRenderTarget();
|
||||||
|
renderTarget.bind();
|
||||||
|
renderTarget.clear(
|
||||||
|
RENDER_TARGET_CLEAR_FLAG_DEPTH |
|
||||||
|
RENDER_TARGET_CLEAR_FLAG_COLOR
|
||||||
|
);
|
||||||
|
|
||||||
|
auto meshes = scene.findComponents<MeshRenderer>();
|
||||||
|
auto it = meshes.begin();
|
||||||
|
while(it != meshes.end()) {
|
||||||
|
auto mesh = *it;
|
||||||
|
auto item = mesh->item;
|
||||||
|
auto material = item.getComponent<Material>();
|
||||||
|
|
||||||
|
// TODO: fallback material?
|
||||||
|
if(material == nullptr) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto shader = material->getShader();
|
||||||
|
shader->bind();
|
||||||
|
shader->setGlobalParameters(camera.projection, camera.item.transform);
|
||||||
|
shader->setMeshParameters(item.transform);
|
||||||
|
material->setShaderParameters();
|
||||||
|
|
||||||
|
mesh->mesh->draw(MESH_DRAW_MODE_TRIANGLES, 0, -1);
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RenderPipeline::~RenderPipeline() {
|
RenderPipeline::~RenderPipeline() {
|
||||||
|
|
||||||
}
|
}
|
@ -14,11 +14,44 @@ namespace Dawn {
|
|||||||
public:
|
public:
|
||||||
RenderManager &renderManager;
|
RenderManager &renderManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new RenderPipeline. Render Pipelines are my attempt to
|
||||||
|
* create both a flexible, but standard way to allow the individual games
|
||||||
|
* to decide how they want to render the common scene-item models.
|
||||||
|
*
|
||||||
|
* @param renderManager Parent render manager this pipeline belongs to.
|
||||||
|
*/
|
||||||
RenderPipeline(RenderManager &renderManager);
|
RenderPipeline(RenderManager &renderManager);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the render pipeline.
|
||||||
|
*/
|
||||||
virtual void init();
|
virtual void init();
|
||||||
void render();
|
|
||||||
virtual void renderScene(Scene &scene) = 0;
|
/**
|
||||||
|
* Renders the games' currently active scene, and all of its' cameras.
|
||||||
|
*/
|
||||||
|
virtual void render();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render a specific scene, usually just called for the currently active
|
||||||
|
* scene, but in future this could include sub-scenes.
|
||||||
|
*
|
||||||
|
* @param scene Scene to render.
|
||||||
|
*/
|
||||||
|
virtual void renderScene(Scene &scene);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render a specific camera on a specific scene.
|
||||||
|
*
|
||||||
|
* @param scene Scene to render.
|
||||||
|
* @param camera Camera within the scene to render.
|
||||||
|
*/
|
||||||
virtual void renderSceneCamera(Scene &scene, Camera &camera) = 0;
|
virtual void renderSceneCamera(Scene &scene, Camera &camera) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleanup a render pipeline that has been initialized.
|
||||||
|
*/
|
||||||
virtual ~RenderPipeline();
|
virtual ~RenderPipeline();
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -13,10 +13,43 @@
|
|||||||
namespace Dawn {
|
namespace Dawn {
|
||||||
class RenderTarget {
|
class RenderTarget {
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
* Return the width of the render target.
|
||||||
|
*
|
||||||
|
* @return The width of the render target.
|
||||||
|
*/
|
||||||
virtual float_t getWidth() = 0;
|
virtual float_t getWidth() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the height of the render target.
|
||||||
|
*
|
||||||
|
* @return The height of the render target.
|
||||||
|
*/
|
||||||
virtual float_t getHeight() = 0;
|
virtual float_t getHeight() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the clear color of the render target when the clear method for
|
||||||
|
* the color buffer is requested.
|
||||||
|
*
|
||||||
|
* @param color Color to use for the clear operation.
|
||||||
|
*/
|
||||||
virtual void setClearColor(struct Color color) = 0;
|
virtual void setClearColor(struct Color color) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request the existing data in the render target to be cleared out. We
|
||||||
|
* typically assume the render target can support multiple buffer types,
|
||||||
|
* so you can opt to only clear certain buffer types.
|
||||||
|
*
|
||||||
|
* @param clearFlags Flags to request what is going to be cleared.
|
||||||
|
*/
|
||||||
virtual void clear(flag8_t clearFlags) = 0;
|
virtual void clear(flag8_t clearFlags) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bind the render target for rendering to. The proceeding render requests
|
||||||
|
* will want to render to this render target directly. In future I may
|
||||||
|
* see if we can have multiple render targets bound at once to make this
|
||||||
|
* operation perform faster.
|
||||||
|
*/
|
||||||
virtual void bind() = 0;
|
virtual void bind() = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -58,7 +58,5 @@ namespace Dawn {
|
|||||||
* Perform a synchronous frame update on the render manager.
|
* Perform a synchronous frame update on the render manager.
|
||||||
*/
|
*/
|
||||||
virtual void update() = 0;
|
virtual void update() = 0;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -24,16 +24,33 @@ namespace Dawn {
|
|||||||
*/
|
*/
|
||||||
virtual void bind() = 0;
|
virtual void bind() = 0;
|
||||||
|
|
||||||
// virtual void setCamera(glm::mat4 projection, glm::mat4 view) = 0;
|
/**
|
||||||
// virtual void setLocalPosition(glm::mat4 position) = 0;
|
* Requested by the Material to set the default parameters of the shader.
|
||||||
|
* Each parameter really should have a default value set so that there is
|
||||||
|
* no nullptr's or other issues.
|
||||||
|
*
|
||||||
|
* @param material Material to set the default parameters on to.
|
||||||
|
*/
|
||||||
virtual void setDefaultParameters(Material &material) = 0;
|
virtual void setDefaultParameters(Material &material) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requested by the render pipeline (typically) to set global level (once
|
||||||
|
* per frame) parameters.
|
||||||
|
*
|
||||||
|
* @param projection Projection matrix of the current viewport.
|
||||||
|
* @param view View matrix of the current viewport.
|
||||||
|
*/
|
||||||
virtual void setGlobalParameters(
|
virtual void setGlobalParameters(
|
||||||
glm::mat4 projection,
|
glm::mat4 projection,
|
||||||
glm::mat4 view
|
glm::mat4 view
|
||||||
) = 0;
|
) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requested by the render pipeline (typically) to set mesh-level params.
|
||||||
|
* This may be performed multiple times per frame.
|
||||||
|
*
|
||||||
|
* @param position Matrix of the position of the mesh.
|
||||||
|
*/
|
||||||
virtual void setMeshParameters(glm::mat4 position) = 0;
|
virtual void setMeshParameters(glm::mat4 position) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -15,13 +15,36 @@ namespace Dawn {
|
|||||||
public:
|
public:
|
||||||
SceneItem &item;
|
SceneItem &item;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new SceneItemComponent. Components are attached to
|
||||||
|
* SceneItems and will be individual responsibility components, and must
|
||||||
|
* communicate to other items/components using methods and events.
|
||||||
|
*
|
||||||
|
* @param item Scene Item thsi component belongs to.
|
||||||
|
*/
|
||||||
SceneItemComponent(SceneItem &item);
|
SceneItemComponent(SceneItem &item);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requested on the first frame that the parent scene item has become
|
||||||
|
* active.
|
||||||
|
*/
|
||||||
virtual void start() = 0;
|
virtual void start() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shorthand to return the scene that this component's item belongs to.
|
||||||
|
* @return The current scene.
|
||||||
|
*/
|
||||||
Scene & getScene();
|
Scene & getScene();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shorthand to return the game that this scene belongs to.
|
||||||
|
* @return The current game.
|
||||||
|
*/
|
||||||
DawnGame & getGame();
|
DawnGame & getGame();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleanup the SceneItemComponent.
|
||||||
|
*/
|
||||||
virtual ~SceneItemComponent();
|
virtual ~SceneItemComponent();
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -3,11 +3,5 @@
|
|||||||
# This software is released under the MIT License.
|
# This software is released under the MIT License.
|
||||||
# https://opensource.org/licenses/MIT
|
# https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
# Sources
|
|
||||||
target_sources(${DAWN_TARGET_NAME}
|
|
||||||
PRIVATE
|
|
||||||
DummyComponent.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
# Subdirs
|
# Subdirs
|
||||||
add_subdirectory(display)
|
add_subdirectory(display)
|
@ -4,7 +4,6 @@
|
|||||||
// https://opensource.org/licenses/MIT
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "scene/components/DummyComponent.hpp"
|
|
||||||
#include "scene/components/display/Camera.hpp"
|
#include "scene/components/display/Camera.hpp"
|
||||||
#include "scene/components/display/MeshRenderer.hpp"
|
#include "scene/components/display/MeshRenderer.hpp"
|
||||||
#include "scene/components/display/Material.hpp"
|
#include "scene/components/display/Material.hpp"
|
@ -1,12 +0,0 @@
|
|||||||
// Copyright (c) 2022 Dominic Masters
|
|
||||||
//
|
|
||||||
// This software is released under the MIT License.
|
|
||||||
// https://opensource.org/licenses/MIT
|
|
||||||
|
|
||||||
#include "DummyComponent.hpp"
|
|
||||||
|
|
||||||
using namespace Dawn;
|
|
||||||
|
|
||||||
void DummyComponent::start() {
|
|
||||||
std::cout << "Dummy Component Start" << std::endl;
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
// Copyright (c) 2022 Dominic Masters
|
|
||||||
//
|
|
||||||
// This software is released under the MIT License.
|
|
||||||
// https://opensource.org/licenses/MIT
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#include "scene/SceneItemComponent.hpp"
|
|
||||||
|
|
||||||
namespace Dawn {
|
|
||||||
class DummyComponent : public SceneItemComponent {
|
|
||||||
public:
|
|
||||||
DummyComponent(SceneItem &item) :
|
|
||||||
SceneItemComponent(item)
|
|
||||||
{
|
|
||||||
std::cout << "Dummy Component Initialized" << std::endl;
|
|
||||||
};
|
|
||||||
|
|
||||||
void start() override;
|
|
||||||
};
|
|
||||||
}
|
|
@ -45,7 +45,6 @@ namespace Dawn {
|
|||||||
void updateProjection();
|
void updateProjection();
|
||||||
|
|
||||||
void lookAt(glm::vec3 position, glm::vec3 look);
|
void lookAt(glm::vec3 position, glm::vec3 look);
|
||||||
|
|
||||||
void lookAt(glm::vec3 position, glm::vec3 look, glm::vec3 up);
|
void lookAt(glm::vec3 position, glm::vec3 look, glm::vec3 up);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,7 +17,6 @@ Material::Material(SceneItem &item) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Material::updateShaderParameters() {
|
void Material::updateShaderParameters() {
|
||||||
std::cout << "Updating params" << std::endl;
|
|
||||||
this->colorValues.clear();
|
this->colorValues.clear();
|
||||||
this->boolValues.clear();
|
this->boolValues.clear();
|
||||||
|
|
||||||
|
@ -11,29 +11,56 @@ namespace Dawn {
|
|||||||
class Shader;
|
class Shader;
|
||||||
|
|
||||||
class Material : public SceneItemComponent {
|
class Material : public SceneItemComponent {
|
||||||
friend class RenderPipeline;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<Shader> shader;
|
std::shared_ptr<Shader> shader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method that will be invoked to go through and update all of
|
||||||
|
* the shader parameters whenever the shader is swapped out.
|
||||||
|
*/
|
||||||
void updateShaderParameters();
|
void updateShaderParameters();
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::map<shaderparameter_t, enum ShaderParameterType> parameters;
|
std::map<shaderparameter_t, enum ShaderParameterType> parameters;
|
||||||
|
|
||||||
std::map<shaderparameter_t, struct Color> colorValues;
|
std::map<shaderparameter_t, struct Color> colorValues;
|
||||||
std::map<shaderparameter_t, bool_t> boolValues;
|
std::map<shaderparameter_t, bool_t> boolValues;
|
||||||
std::map<shaderparameter_t, glm::mat4> matrixValues;
|
std::map<shaderparameter_t, glm::mat4> matrixValues;
|
||||||
std::map<shaderparameter_t, glm::vec3> vec3Values;
|
std::map<shaderparameter_t, glm::vec3> vec3Values;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Material component constructor.
|
||||||
|
*
|
||||||
|
* @param item Scene Item this component belongs to.
|
||||||
|
*/
|
||||||
Material(SceneItem &item);
|
Material(SceneItem &item);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the shader this material is currently using.
|
||||||
|
*
|
||||||
|
* @return Shader pointer to the currently bound shader.
|
||||||
|
*/
|
||||||
std::shared_ptr<Shader> getShader();
|
std::shared_ptr<Shader> getShader();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the shader for the material to use. This will also clear and
|
||||||
|
* update all of the parameters from the shaders' default parameter list.
|
||||||
|
*
|
||||||
|
* @param shader Shader to set.
|
||||||
|
*/
|
||||||
void setShader(std::shared_ptr<Shader> shader);
|
void setShader(std::shared_ptr<Shader> shader);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protected method that can be called, likely by the render pipeline, to
|
||||||
|
* set and update all of the shader parameters from this material on to
|
||||||
|
* the shader.
|
||||||
|
*
|
||||||
|
* This method assumes that the shader has already been bound.
|
||||||
|
*/
|
||||||
void setShaderParameters();
|
void setShaderParameters();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overrides the default SceneItemComponent start method.
|
||||||
|
*/
|
||||||
void start() override;
|
void start() override;
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -12,8 +12,16 @@ namespace Dawn {
|
|||||||
public:
|
public:
|
||||||
std::shared_ptr<Mesh> mesh = nullptr;
|
std::shared_ptr<Mesh> mesh = nullptr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a MeshRenderer scene item component.
|
||||||
|
*
|
||||||
|
* @param item Scene Item this mesh renderer belongs to.
|
||||||
|
*/
|
||||||
MeshRenderer(SceneItem &item);
|
MeshRenderer(SceneItem &item);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overrides the default SceneItemComponent start method.
|
||||||
|
*/
|
||||||
void start() override;
|
void start() override;
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -18,15 +18,28 @@ namespace Dawn {
|
|||||||
struct Color clearColor = COLOR_CORNFLOWER_BLUE;
|
struct Color clearColor = COLOR_CORNFLOWER_BLUE;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
* Construct the back buffer render target.
|
||||||
|
*
|
||||||
|
* @param renderManager Render Manager for this back buffer target.
|
||||||
|
*/
|
||||||
BackBufferRenderTarget(RenderManager &renderManager);
|
BackBufferRenderTarget(RenderManager &renderManager);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests to modify the viewport directly. This is mostly to be called
|
||||||
|
* by whatever is setting the window/display resolution, so that the
|
||||||
|
* backbuffer can keep track of what the viewport size is. This should
|
||||||
|
* also be DPI aware, e.g. "4k @ 2xDPI, resulting in a 1080p equiv" should
|
||||||
|
* still call this method with 3840, 2160.
|
||||||
|
*
|
||||||
|
* @param width New width of the back buffer.
|
||||||
|
* @param height New height of the back buffer.
|
||||||
|
*/
|
||||||
|
void setSize(float_t width, float_t height);
|
||||||
|
|
||||||
float_t getWidth() override;
|
float_t getWidth() override;
|
||||||
float_t getHeight() override;
|
float_t getHeight() override;
|
||||||
|
void setClearColor(struct Color color) override;
|
||||||
void setSize(float_t width, float_t height);
|
|
||||||
|
|
||||||
void setClearColor(struct Color color);
|
|
||||||
|
|
||||||
void clear(flag8_t clearFlags) override;
|
void clear(flag8_t clearFlags) override;
|
||||||
void bind() override;
|
void bind() override;
|
||||||
};
|
};
|
||||||
|
@ -11,60 +11,4 @@ using namespace Dawn;
|
|||||||
StandardRenderPipeline::StandardRenderPipeline(RenderManager &renderManager) :
|
StandardRenderPipeline::StandardRenderPipeline(RenderManager &renderManager) :
|
||||||
RenderPipeline(renderManager)
|
RenderPipeline(renderManager)
|
||||||
{
|
{
|
||||||
}
|
|
||||||
|
|
||||||
void StandardRenderPipeline::renderScene(Scene &scene) {
|
|
||||||
RenderTarget &backBuffer = this->renderManager.getBackBuffer();
|
|
||||||
auto cameras = scene.findComponents<Camera>();
|
|
||||||
std::shared_ptr<Camera> backBufferCamera = nullptr;
|
|
||||||
|
|
||||||
// First, render all non-backbuffer cameras.
|
|
||||||
auto it = cameras.begin();
|
|
||||||
while(it != cameras.end()) {
|
|
||||||
RenderTarget &cameraTarget = (*it)->getRenderTarget();
|
|
||||||
|
|
||||||
// Leave the backbuffer camera(s) to last, so we skip them.
|
|
||||||
if(&cameraTarget == &backBuffer) {
|
|
||||||
backBufferCamera = *it;
|
|
||||||
} else {
|
|
||||||
this->renderSceneCamera(scene, **it);
|
|
||||||
}
|
|
||||||
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now render the backbuffer camera.
|
|
||||||
if(backBufferCamera == nullptr) return;
|
|
||||||
this->renderSceneCamera(scene, *backBufferCamera);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardRenderPipeline::renderSceneCamera(Scene &scene, Camera &camera) {
|
|
||||||
RenderTarget &renderTarget = camera.getRenderTarget();
|
|
||||||
renderTarget.bind();
|
|
||||||
renderTarget.clear(
|
|
||||||
RENDER_TARGET_CLEAR_FLAG_DEPTH |
|
|
||||||
RENDER_TARGET_CLEAR_FLAG_COLOR
|
|
||||||
);
|
|
||||||
|
|
||||||
auto meshes = scene.findComponents<MeshRenderer>();
|
|
||||||
auto it = meshes.begin();
|
|
||||||
while(it != meshes.end()) {
|
|
||||||
auto mesh = *it;
|
|
||||||
auto item = mesh->item;
|
|
||||||
auto material = item.getComponent<Material>();
|
|
||||||
|
|
||||||
// TODO: fallback material?
|
|
||||||
if(material == nullptr) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto shader = material->getShader();
|
|
||||||
shader->bind();
|
|
||||||
shader->setGlobalParameters(camera.projection, camera.item.transform);
|
|
||||||
shader->setMeshParameters(item.transform);
|
|
||||||
material->setShaderParameters();
|
|
||||||
|
|
||||||
mesh->mesh->draw(MESH_DRAW_MODE_TRIANGLES, 0, -1);
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -11,8 +11,5 @@ namespace Dawn {
|
|||||||
class StandardRenderPipeline : public RenderPipeline {
|
class StandardRenderPipeline : public RenderPipeline {
|
||||||
public:
|
public:
|
||||||
StandardRenderPipeline(RenderManager &renderManager);
|
StandardRenderPipeline(RenderManager &renderManager);
|
||||||
|
|
||||||
void renderScene(Scene &scene) override;
|
|
||||||
void renderSceneCamera(Scene &scene, Camera &camera) override;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -23,10 +23,14 @@ namespace Dawn {
|
|||||||
GLuint shaderProgram = -1;
|
GLuint shaderProgram = -1;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void compileShader(
|
/**
|
||||||
std::string vertexShader,
|
* Compiles a GLSL shader and stores it on the GPU, updates the underlying
|
||||||
std::string fragmentShader
|
* pointers for you.
|
||||||
);
|
*
|
||||||
|
* @param vertexShader The string source of the vertex shader.
|
||||||
|
* @param fragmentShader The string source of the fragment shader.
|
||||||
|
*/
|
||||||
|
void compileShader(std::string vertexShader, std::string fragmentShader);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@ -37,13 +41,21 @@ namespace Dawn {
|
|||||||
*/
|
*/
|
||||||
shaderparameter_t getParameterByName(std::string name);
|
shaderparameter_t getParameterByName(std::string name);
|
||||||
|
|
||||||
void bind() override;
|
/**
|
||||||
|
* Method to request that this shader be compiled and put on the GPU. This
|
||||||
|
* method should call the protected compileShader method.
|
||||||
|
*/
|
||||||
virtual void compile() = 0;
|
virtual void compile() = 0;
|
||||||
|
|
||||||
|
void bind() override;
|
||||||
void setMatrix(shaderparameter_t parameter, glm::mat4 matrix) override;
|
void setMatrix(shaderparameter_t parameter, glm::mat4 matrix) override;
|
||||||
void setBoolean(shaderparameter_t parameter, bool_t value) override;
|
void setBoolean(shaderparameter_t parameter, bool_t value) override;
|
||||||
void setColor(shaderparameter_t parameter, struct Color color) override;
|
void setColor(shaderparameter_t parameter, struct Color color) override;
|
||||||
void setVector3(shaderparameter_t parameter, glm::vec3 vector) override;
|
void setVector3(shaderparameter_t parameter, glm::vec3 vector) override;
|
||||||
|
|
||||||
~Shader();
|
/**
|
||||||
|
* Destroys and deletes the shader from the GPU.
|
||||||
|
*/
|
||||||
|
virtual ~Shader();
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -23,8 +23,8 @@ namespace Dawn {
|
|||||||
std::map<shaderparameter_t, enum ShaderParameterType> ps;
|
std::map<shaderparameter_t, enum ShaderParameterType> ps;
|
||||||
|
|
||||||
ps[this->paramColor] = SHADER_PARAMETER_TYPE_COLOR;
|
ps[this->paramColor] = SHADER_PARAMETER_TYPE_COLOR;
|
||||||
|
ps[this->paramHasTexture] = SHADER_PARAMETER_TYPE_BOOLEAN;
|
||||||
// ps[paramTexture] SHADER_PARAMETER_TYPE_TEXTURE;
|
// ps[paramTexture] SHADER_PARAMETER_TYPE_TEXTURE;
|
||||||
// ps[this->paramHasTexture] = SHADER_PARAMETER_TYPE_BOOLEAN;
|
|
||||||
|
|
||||||
return ps;
|
return ps;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user