render from json
This commit is contained in:
@@ -14,8 +14,8 @@ namespace Archimedes {
|
||||
public:
|
||||
Body(RenderTarget rt, glm::mat4 t = glm::mat4(1.0f)) : Object(t), mesh(rt) {};
|
||||
|
||||
Body(VertexBuffer vb, IndexArray ia, VertexLayout vl, Shader s, glm::mat4 t = glm::mat4(1.0f))
|
||||
: Object(t), mesh(vb, ia, vl, s) {}
|
||||
Body(VertexBuffer vb, IndexArray ia, VertexLayout vl, Shader s, RenderMode rm = RenderMode::Triangles, glm::mat4 t = glm::mat4(1.0f))
|
||||
: Object(t), mesh(vb, ia, vl, s, rm) {}
|
||||
|
||||
Body() : Object(glm::mat4(1.0f)) {}
|
||||
|
||||
|
||||
@@ -19,6 +19,11 @@ namespace Archimedes {
|
||||
|
||||
~Camera() {};
|
||||
|
||||
const glm::mat4& getPerspective() { return perspective; }
|
||||
void setPerspective(const glm::mat4 m) { perspective = m; }
|
||||
|
||||
private:
|
||||
glm::mat4 perspective = glm::mat4(1.0f);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@ namespace Archimedes {
|
||||
float& getScale() { return scale; }
|
||||
|
||||
const glm::mat4& getTransform() { return worldTransform; }
|
||||
void setTransform(const glm::mat4 m) { worldTransform = m; }
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -7,6 +7,16 @@
|
||||
|
||||
namespace Archimedes {
|
||||
|
||||
enum class RenderMode {
|
||||
Points,
|
||||
Lines,
|
||||
ConnectedLines,
|
||||
ConnectedLinesLooped,
|
||||
Triangles,
|
||||
Quads,
|
||||
Polygon
|
||||
};
|
||||
|
||||
class LayoutElement {
|
||||
|
||||
public:
|
||||
@@ -154,19 +164,21 @@ namespace Archimedes {
|
||||
class RenderTarget {
|
||||
|
||||
public:
|
||||
RenderTarget(const std::vector<float> data, const std::vector<unsigned int> indices, VertexLayout layout, const std::string& vs, const std::string& fs)
|
||||
RenderTarget(const std::vector<float> data, const std::vector<unsigned int> indices, VertexLayout layout, const std::string& vs, const std::string& fs, RenderMode rm = RenderMode::Triangles)
|
||||
: vertexBuffer(data),
|
||||
indexArray(indices),
|
||||
layout(layout),
|
||||
shader(vs, fs, Shader::LoadType::FromFileSource) {
|
||||
shader(vs, fs, Shader::LoadType::FromFileSource),
|
||||
renderMode(rm) {
|
||||
|
||||
}
|
||||
|
||||
RenderTarget(VertexBuffer vb, IndexArray ia, VertexLayout vl, Shader s)
|
||||
RenderTarget(VertexBuffer vb, IndexArray ia, VertexLayout vl, Shader s, RenderMode rm = RenderMode::Triangles)
|
||||
: vertexBuffer(vb),
|
||||
indexArray(ia),
|
||||
layout(vl),
|
||||
shader(s) {
|
||||
shader(s),
|
||||
renderMode(rm) {
|
||||
|
||||
}
|
||||
|
||||
@@ -174,6 +186,9 @@ namespace Archimedes {
|
||||
|
||||
~RenderTarget() {}
|
||||
|
||||
void setActive(bool b) { active = b; }
|
||||
const bool getActive() const { return active; }
|
||||
|
||||
//private:
|
||||
|
||||
VertexBuffer vertexBuffer;
|
||||
@@ -186,6 +201,10 @@ namespace Archimedes {
|
||||
|
||||
Shader shader;
|
||||
|
||||
RenderMode renderMode;
|
||||
|
||||
bool active = false;
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -13,13 +13,6 @@ namespace Archimedes {
|
||||
|
||||
public:
|
||||
|
||||
enum class RenderMode {
|
||||
Triangles,
|
||||
Lines,
|
||||
ConnectedLines,
|
||||
ConnectedLinesLooped,
|
||||
Points
|
||||
};
|
||||
|
||||
int w, h;
|
||||
|
||||
@@ -35,7 +28,7 @@ namespace Archimedes {
|
||||
|
||||
virtual Shader createShader(const std::string& vs, const std::string& fs, const Shader::LoadType& lt) = 0;
|
||||
|
||||
virtual void useShader(Shader& shader) = 0;
|
||||
virtual void setupShader(Shader& shader) = 0;
|
||||
|
||||
virtual RenderTarget createRenderTarget(
|
||||
VertexBuffer vb,
|
||||
@@ -55,8 +48,7 @@ namespace Archimedes {
|
||||
const glm::mat4 world = glm::mat4(1.0f),
|
||||
const glm::mat4 view = glm::mat4(1.0f),
|
||||
const glm::mat4 proj = glm::mat4(1.0f),
|
||||
glm::vec4 color = { 1.0f, 0.0f, 1.0f, 1.0f },
|
||||
RenderMode mode = RenderMode::Triangles
|
||||
const glm::vec4 color = { 1.0f, 0.0f, 1.0f, 1.0f }
|
||||
) = 0;
|
||||
|
||||
virtual Renderer* getRendererImpl() = 0;
|
||||
|
||||
@@ -92,7 +92,7 @@ namespace Archimedes {
|
||||
return shader;
|
||||
}
|
||||
|
||||
void useShader(Shader& shader) override {
|
||||
void setupShader(Shader& shader) override {
|
||||
|
||||
std::string vss = shader.getVSource();
|
||||
std::string fss = shader.getFSource();
|
||||
@@ -145,30 +145,7 @@ namespace Archimedes {
|
||||
|
||||
auto rt = RenderTarget(vb, ia, layout, s);
|
||||
|
||||
glGenVertexArrays(1, &rt.vertexArray.id);
|
||||
|
||||
glGenBuffers(1, &rt.vertexBuffer.id);
|
||||
|
||||
glBindVertexArray(rt.vertexArray.id);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, rt.vertexBuffer.id);
|
||||
glBufferData(GL_ARRAY_BUFFER, vb.getSize(), vb.getData(), GL_STATIC_DRAW);
|
||||
|
||||
|
||||
glGenBuffers(1, &rt.indexArray.id);
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, rt.indexArray.id);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, rt.indexArray.getCount() * sizeof(unsigned int), rt.indexArray.getIndicies(), GL_STATIC_DRAW);
|
||||
|
||||
|
||||
glUseProgram(s.id);
|
||||
|
||||
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
|
||||
glEnableVertexAttribArray(0);
|
||||
|
||||
glBindVertexArray(0);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
setupRenderTarget(rt);
|
||||
|
||||
return rt;
|
||||
};
|
||||
@@ -216,8 +193,7 @@ namespace Archimedes {
|
||||
const glm::mat4 world = glm::mat4(1.0f),
|
||||
const glm::mat4 view = glm::mat4(1.0f),
|
||||
const glm::mat4 proj = glm::mat4(1.0f),
|
||||
glm::vec4 color = { 1.0f, 0.0f, 1.0f, 1.0f },
|
||||
RenderMode mode = RenderMode::Triangles
|
||||
const glm::vec4 color = { 1.0f, 0.0f, 1.0f, 1.0f }
|
||||
) override {
|
||||
|
||||
glUseProgram(rt.shader.id);
|
||||
@@ -236,7 +212,7 @@ namespace Archimedes {
|
||||
|
||||
glBindVertexArray(rt.vertexArray.id);
|
||||
|
||||
switch(mode) {
|
||||
switch(rt.renderMode) {
|
||||
case RenderMode::Triangles:
|
||||
glDrawElements(GL_TRIANGLES, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
@@ -249,6 +225,12 @@ namespace Archimedes {
|
||||
case RenderMode::ConnectedLinesLooped:
|
||||
glDrawElements(GL_LINE_LOOP, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
case RenderMode::Quads:
|
||||
glDrawElements(GL_QUADS, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
case RenderMode::Polygon:
|
||||
glDrawElements(GL_POLYGON, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
case RenderMode::Points:
|
||||
glDrawElements(GL_POINTS, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user