Textures and colors passed to shader via Uniforms
This commit is contained in:
		@@ -37,7 +37,10 @@ swig_add_library(couchlua
 | 
				
			|||||||
target_link_libraries(couchlua ${LUA_LIBRARIES})
 | 
					target_link_libraries(couchlua ${LUA_LIBRARIES})
 | 
				
			||||||
target_link_libraries(couch couchlua)
 | 
					target_link_libraries(couch couchlua)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_subdirectory(thirdparty)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(WIN32)
 | 
					if(WIN32)
 | 
				
			||||||
  target_link_libraries(couch glfw3dll)
 | 
					  target_link_libraries(couch glfw3dll)
 | 
				
			||||||
 | 
					  target_link_libraries(couch ssp)
 | 
				
			||||||
  set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
 | 
					  set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
 | 
				
			||||||
endif(WIN32)
 | 
					endif(WIN32)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								container.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								container.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 413 KiB  | 
@@ -3,15 +3,15 @@
 | 
				
			|||||||
Ball::Ball() {
 | 
					Ball::Ball() {
 | 
				
			||||||
  // It's a cube really
 | 
					  // It's a cube really
 | 
				
			||||||
  // Front
 | 
					  // Front
 | 
				
			||||||
  vertices.push_back(Vertex(1.0f, 1.0f, 1.0f));
 | 
					  vertices.push_back(Vertex(1.0f, 1.0f, 1.0f, 0.0f, 1.0f));
 | 
				
			||||||
  vertices.push_back(Vertex(1.0f, -1.0f, 1.0f));
 | 
					  vertices.push_back(Vertex(1.0f, -1.0f, 1.0f, 0.0f, 0.0f));
 | 
				
			||||||
  vertices.push_back(Vertex(-1.0f, 1.0f, 1.0f));
 | 
					  vertices.push_back(Vertex(-1.0f, 1.0f, 1.0f, 1.0f, 1.0f));
 | 
				
			||||||
  vertices.push_back(Vertex(-1.0f, -1.0f, 1.0f));
 | 
					  vertices.push_back(Vertex(-1.0f, -1.0f, 1.0f, 1.0f, 0.0f));
 | 
				
			||||||
  // Back
 | 
					  // Back
 | 
				
			||||||
  vertices.push_back(Vertex(1.0f, 1.0f, -1.0f));
 | 
					  vertices.push_back(Vertex(1.0f, 1.0f, -1.0f, 0.0f, 0.0f));
 | 
				
			||||||
  vertices.push_back(Vertex(1.0f, -1.0f, -1.0f));
 | 
					  vertices.push_back(Vertex(1.0f, -1.0f, -1.0f, 0.0f, 1.0f));
 | 
				
			||||||
  vertices.push_back(Vertex(-1.0f, 1.0f, -1.0f));
 | 
					  vertices.push_back(Vertex(-1.0f, 1.0f, -1.0f, 1.0f, 0.0f));
 | 
				
			||||||
  vertices.push_back(Vertex(-1.0f, -1.0f, -1.0f));
 | 
					  vertices.push_back(Vertex(-1.0f, -1.0f, -1.0f, 1.0f, 1.0f));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //Front
 | 
					  //Front
 | 
				
			||||||
  indices.push_back(Index(0, 1, 2));
 | 
					  indices.push_back(Index(0, 1, 2));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,11 +2,13 @@
 | 
				
			|||||||
#define DRAWABLE_H
 | 
					#define DRAWABLE_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "Node.h"
 | 
					#include "Node.h"
 | 
				
			||||||
 | 
					#include "Material.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Drawable : virtual public Node {
 | 
					class Drawable : virtual public Node {
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  virtual bool IsDrawable() const {return true;}
 | 
					  virtual bool IsDrawable() const {return true;}
 | 
				
			||||||
  virtual void Draw() = 0;
 | 
					  virtual void Draw() = 0;
 | 
				
			||||||
 | 
					  Material *material;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* DRAWABLE_H */
 | 
					#endif /* DRAWABLE_H */
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										47
									
								
								core/Material.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								core/Material.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					#include "Material.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Color::Color() {
 | 
				
			||||||
 | 
					  this->r = 0.0f;
 | 
				
			||||||
 | 
					  this->g = 0.0f;
 | 
				
			||||||
 | 
					  this->b = 0.0f;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Color::Color(cfloat r, cfloat g, cfloat b) {
 | 
				
			||||||
 | 
					  this->r = r;
 | 
				
			||||||
 | 
					  this->g = g;
 | 
				
			||||||
 | 
					  this->b = b;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Texture::Texture() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Texture Texture::FromFile(const char *filename) {
 | 
				
			||||||
 | 
					  // Lotta hocus pocus
 | 
				
			||||||
 | 
					  // https://learnopengl.com/Getting-started/Textures
 | 
				
			||||||
 | 
					  Texture tex;
 | 
				
			||||||
 | 
					  glGenTextures(1, &tex.id);
 | 
				
			||||||
 | 
					  glBindTexture(GL_TEXTURE_2D, tex.id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
 | 
				
			||||||
 | 
					  glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT);
 | 
				
			||||||
 | 
					  glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 | 
				
			||||||
 | 
					  glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int nrChannels;
 | 
				
			||||||
 | 
					  unsigned char* data = stbi_load(filename, &tex.width, &tex.height, &nrChannels, 0);
 | 
				
			||||||
 | 
					  if (data) {
 | 
				
			||||||
 | 
					    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tex.width, tex.height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
 | 
				
			||||||
 | 
					    glGenerateMipmap(GL_TEXTURE_2D);
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    std::cout << "Error loading texture file: " << filename << std::endl;
 | 
				
			||||||
 | 
					    exit(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  stbi_image_free(data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return tex;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Material::Material() {
 | 
				
			||||||
 | 
					  usesColor = false;
 | 
				
			||||||
 | 
					  usesTex = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										34
									
								
								core/Material.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								core/Material.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					#ifndef MATERIAL_H
 | 
				
			||||||
 | 
					#define MATERIAL_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <GL/glew.h>
 | 
				
			||||||
 | 
					#include "stb_image.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "types.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct Color {
 | 
				
			||||||
 | 
					  cfloat r, g, b;
 | 
				
			||||||
 | 
					  Color();
 | 
				
			||||||
 | 
					  Color(cfloat r, cfloat g, cfloat b);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Texture {
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					  int width, height;
 | 
				
			||||||
 | 
					  Id id;
 | 
				
			||||||
 | 
					  static Texture FromFile(const char *filename);
 | 
				
			||||||
 | 
					  Texture();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct Material {
 | 
				
			||||||
 | 
					  Color color;
 | 
				
			||||||
 | 
					  bool usesColor;
 | 
				
			||||||
 | 
					  Texture tex;
 | 
				
			||||||
 | 
					  bool usesTex;
 | 
				
			||||||
 | 
					  Material();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* MATERIAL_H */
 | 
				
			||||||
@@ -1,6 +1,12 @@
 | 
				
			|||||||
#include "Mesh.h"
 | 
					#include "Mesh.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Mesh::Mesh() {}
 | 
					Mesh::Mesh() {
 | 
				
			||||||
 | 
					  material = new Material();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Mesh::~Mesh() {
 | 
				
			||||||
 | 
					  delete material;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Mesh::Mesh(VertexList vertices, IndexList indices) {
 | 
					Mesh::Mesh(VertexList vertices, IndexList indices) {
 | 
				
			||||||
  this->vertices = vertices;
 | 
					  this->vertices = vertices;
 | 
				
			||||||
@@ -24,7 +30,10 @@ void Mesh::SetupMesh() {
 | 
				
			|||||||
  // Vertex positions
 | 
					  // Vertex positions
 | 
				
			||||||
  glEnableVertexAttribArray(0);
 | 
					  glEnableVertexAttribArray(0);
 | 
				
			||||||
  glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*) 0);
 | 
					  glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*) 0);
 | 
				
			||||||
  // TODO normals, uv
 | 
					  // Vertex UV
 | 
				
			||||||
 | 
					  glEnableVertexAttribArray(1);
 | 
				
			||||||
 | 
					  glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)(3 * sizeof(float)));
 | 
				
			||||||
 | 
					  // TODO normals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  glBindVertexArray(0);
 | 
					  glBindVertexArray(0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,7 @@ public:
 | 
				
			|||||||
  VertexList vertices;
 | 
					  VertexList vertices;
 | 
				
			||||||
  IndexList indices;
 | 
					  IndexList indices;
 | 
				
			||||||
  Mesh();
 | 
					  Mesh();
 | 
				
			||||||
 | 
					  ~Mesh();
 | 
				
			||||||
  Mesh(VertexList vertices, IndexList indices);
 | 
					  Mesh(VertexList vertices, IndexList indices);
 | 
				
			||||||
  virtual void Draw();
 | 
					  virtual void Draw();
 | 
				
			||||||
  virtual void SetupMesh();
 | 
					  virtual void SetupMesh();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,8 +67,6 @@ Shader::Shader(const char* vertexPath, const char* fragmentPath) {
 | 
				
			|||||||
  glDeleteShader(fragment);
 | 
					  glDeleteShader(fragment);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void Shader::Use() {
 | 
					void Shader::Use() {
 | 
				
			||||||
  glUseProgram(id);
 | 
					  glUseProgram(id);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -85,6 +83,23 @@ void Shader::UpdateProjection(Matrix projection) {
 | 
				
			|||||||
  glUniformMatrix4fv(glGetUniformLocation(id, "PROJECTION"), 1, GL_FALSE, glm::value_ptr(projection));
 | 
					  glUniformMatrix4fv(glGetUniformLocation(id, "PROJECTION"), 1, GL_FALSE, glm::value_ptr(projection));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Shader::UpdateColor(bool usesColor) {
 | 
				
			||||||
 | 
					  glUniform1i(glGetUniformLocation(id, "material.usesColor"), (int) usesColor);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Shader::UpdateColor(bool usesColor, Color color) {
 | 
				
			||||||
 | 
					  glUniform1i(glGetUniformLocation(id, "material.usesColor"), (int) usesColor);
 | 
				
			||||||
 | 
					  glUniform3f(glGetUniformLocation(id, "material.color"), color.r, color.g, color.b);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Shader::UpdateTex(bool usesTex) {
 | 
				
			||||||
 | 
					  glUniform1i(glGetUniformLocation(id, "material.usesTex"), (int) usesTex);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					void Shader::UpdateTex(bool usesTex, Texture tex) {
 | 
				
			||||||
 | 
					  glUniform1i(glGetUniformLocation(id, "material.usesTex"), (int) usesTex);
 | 
				
			||||||
 | 
					  glBindTexture(GL_TEXTURE_2D, tex.id);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name Shader::GetName() const {
 | 
					Name Shader::GetName() const {
 | 
				
			||||||
  return "Unnamed Shader";
 | 
					  return "Unnamed Shader";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@
 | 
				
			|||||||
#include <glm/gtc/type_ptr.hpp>
 | 
					#include <glm/gtc/type_ptr.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "types.h"
 | 
					#include "types.h"
 | 
				
			||||||
 | 
					#include "Material.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Shader {
 | 
					class Shader {
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
@@ -19,6 +20,10 @@ public:
 | 
				
			|||||||
  void UpdateView(Matrix view);
 | 
					  void UpdateView(Matrix view);
 | 
				
			||||||
  void UpdateModel(Matrix model);
 | 
					  void UpdateModel(Matrix model);
 | 
				
			||||||
  void UpdateProjection(Matrix projection);
 | 
					  void UpdateProjection(Matrix projection);
 | 
				
			||||||
 | 
					  void UpdateColor(bool usesColor);
 | 
				
			||||||
 | 
					  void UpdateColor(bool usesColor, Color color);
 | 
				
			||||||
 | 
					  void UpdateTex(bool usesTex);
 | 
				
			||||||
 | 
					  void UpdateTex(bool usesTex, Texture tex);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual Name GetName() const;
 | 
					  virtual Name GetName() const;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,10 +4,22 @@ Vertex::Vertex() {
 | 
				
			|||||||
  x = 0.0f;
 | 
					  x = 0.0f;
 | 
				
			||||||
  y = 0.0f;
 | 
					  y = 0.0f;
 | 
				
			||||||
  z = 0.0f;
 | 
					  z = 0.0f;
 | 
				
			||||||
 | 
					  u = 0.0f;
 | 
				
			||||||
 | 
					  v = 0.0f;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Vertex::Vertex(cfloat x, cfloat y, cfloat z) {
 | 
					Vertex::Vertex(cfloat x, cfloat y, cfloat z) {
 | 
				
			||||||
  this->x = x;
 | 
					  this->x = x;
 | 
				
			||||||
  this->y = y;
 | 
					  this->y = y;
 | 
				
			||||||
  this->z = z;
 | 
					  this->z = z;
 | 
				
			||||||
 | 
					  this->u = 0.0f;
 | 
				
			||||||
 | 
					  this->v = 0.0f;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Vertex::Vertex(cfloat x, cfloat y, cfloat z, cfloat u, cfloat v) {
 | 
				
			||||||
 | 
					  this->x = x;
 | 
				
			||||||
 | 
					  this->y = y;
 | 
				
			||||||
 | 
					  this->z = z;
 | 
				
			||||||
 | 
					  this->u = u;
 | 
				
			||||||
 | 
					  this->v = v;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,9 @@
 | 
				
			|||||||
struct Vertex {
 | 
					struct Vertex {
 | 
				
			||||||
  Vertex();
 | 
					  Vertex();
 | 
				
			||||||
  Vertex(cfloat x, cfloat y, cfloat z);
 | 
					  Vertex(cfloat x, cfloat y, cfloat z);
 | 
				
			||||||
 | 
					  Vertex(cfloat x, cfloat y, cfloat z, cfloat u, cfloat v);
 | 
				
			||||||
  cfloat x, y, z;
 | 
					  cfloat x, y, z;
 | 
				
			||||||
 | 
					  cfloat u, v;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef std::vector<Vertex> VertexList;
 | 
					typedef std::vector<Vertex> VertexList;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,10 @@
 | 
				
			|||||||
#include "Node.h"
 | 
					#include "Node.h"
 | 
				
			||||||
#include "Lua.h"
 | 
					#include "Lua.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Thirdparty Includes
 | 
				
			||||||
 | 
					#define STB_IMAGE_IMPLEMENTATION
 | 
				
			||||||
 | 
					#include "stb_image.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Window *window;
 | 
					Window *window;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const int width = 800;
 | 
					const int width = 800;
 | 
				
			||||||
@@ -33,6 +37,16 @@ void render(Node *curr, Shader *shader, Matrix model) {
 | 
				
			|||||||
      shader->UpdateModel(model);
 | 
					      shader->UpdateModel(model);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    Drawable *drawable = dynamic_cast<Drawable*>(curr);
 | 
					    Drawable *drawable = dynamic_cast<Drawable*>(curr);
 | 
				
			||||||
 | 
					    if (drawable->material->usesColor) {
 | 
				
			||||||
 | 
					      shader->UpdateColor(true, drawable->material->color);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      shader->UpdateColor(false);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (drawable->material->usesTex) {
 | 
				
			||||||
 | 
					      shader->UpdateTex(true, drawable->material->tex);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      shader->UpdateTex(false);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    drawable->Draw();
 | 
					    drawable->Draw();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  for (Node *child : curr->children) {
 | 
					  for (Node *child : curr->children) {
 | 
				
			||||||
@@ -66,6 +80,7 @@ int main() {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  glViewport(0, 0, width, height);
 | 
					  glViewport(0, 0, width, height);
 | 
				
			||||||
 | 
					  glEnable(GL_DEPTH_TEST);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  root = Node::GetRoot();
 | 
					  root = Node::GetRoot();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -76,7 +91,6 @@ int main() {
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
  FlatShader *shader = new FlatShader();
 | 
					  FlatShader *shader = new FlatShader();
 | 
				
			||||||
  shader->Use();
 | 
					  shader->Use();
 | 
				
			||||||
  shader->UpdateColor(Vector3(0.0f, 1.0f, 0.0f));
 | 
					 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  Matrix projection = glm::perspective(glm::radians(45.0f), 800.0f/600.0f, 0.1f, 100.0f);
 | 
					  Matrix projection = glm::perspective(glm::radians(45.0f), 800.0f/600.0f, 0.1f, 100.0f);
 | 
				
			||||||
  shader->UpdateProjection(projection);
 | 
					  shader->UpdateProjection(projection);
 | 
				
			||||||
@@ -90,7 +104,7 @@ int main() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  while(!glfwWindowShouldClose(window)) {
 | 
					  while(!glfwWindowShouldClose(window)) {
 | 
				
			||||||
    glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
 | 
					    glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
 | 
				
			||||||
    glClear(GL_COLOR_BUFFER_BIT);
 | 
					    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    lua->Update(delta);
 | 
					    lua->Update(delta);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								main.lua
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								main.lua
									
									
									
									
									
								
							@@ -20,15 +20,23 @@ local cam_rot_y = 0.0
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local SPEED = 30
 | 
					local SPEED = 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local RED = couch.Color(1.0, 0.0, 0.0)
 | 
				
			||||||
 | 
					local BLUE = couch.Color(0.0, 0.0, 1.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function init()
 | 
					function init()
 | 
				
			||||||
   camera = couch.Camera()
 | 
					   camera = couch.Camera()
 | 
				
			||||||
   camera:MakeCurrent()
 | 
					   camera:MakeCurrent()
 | 
				
			||||||
   camera.transform:Translate(0.0, 0.0, 10.0)
 | 
					   camera.transform:Translate(0.0, 0.0, 10.0)
 | 
				
			||||||
   ball = couch.Ball()
 | 
					   ball = couch.Ball()
 | 
				
			||||||
   ball:SetupMesh()
 | 
					   ball:SetupMesh()
 | 
				
			||||||
 | 
					   ball.material.color = RED
 | 
				
			||||||
 | 
					   ball.material.usesColor = true
 | 
				
			||||||
   couch.Node.GetRoot().children:Append(ball)
 | 
					   couch.Node.GetRoot().children:Append(ball)
 | 
				
			||||||
   ball1 = couch.Ball()
 | 
					   ball1 = couch.Ball()
 | 
				
			||||||
   ball1:SetupMesh()
 | 
					   ball1:SetupMesh()
 | 
				
			||||||
 | 
					   ball1.material.tex = couch.Texture.FromFile("container.png")
 | 
				
			||||||
 | 
					   ball1.material.usesTex = true
 | 
				
			||||||
 | 
					   print(ball1.material.tex.width, ball1.material.tex.height)
 | 
				
			||||||
   couch.Node.GetRoot().children:Append(ball1)
 | 
					   couch.Node.GetRoot().children:Append(ball1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ball1.transform:Translate(0.0, 3.0, 0.0)
 | 
					   ball1.transform:Translate(0.0, 3.0, 0.0)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,7 @@
 | 
				
			|||||||
#include "Transform.h"
 | 
					#include "Transform.h"
 | 
				
			||||||
#include "Spatial.h"
 | 
					#include "Spatial.h"
 | 
				
			||||||
#include "Drawable.h"
 | 
					#include "Drawable.h"
 | 
				
			||||||
 | 
					#include "Material.h"
 | 
				
			||||||
#include "Mesh.h"
 | 
					#include "Mesh.h"
 | 
				
			||||||
#include "Ball.h"
 | 
					#include "Ball.h"
 | 
				
			||||||
#include "Camera.h"
 | 
					#include "Camera.h"
 | 
				
			||||||
@@ -36,6 +37,7 @@ public:
 | 
				
			|||||||
%include "Spatial.h"
 | 
					%include "Spatial.h"
 | 
				
			||||||
%include "Transform.h"
 | 
					%include "Transform.h"
 | 
				
			||||||
%include "Drawable.h"
 | 
					%include "Drawable.h"
 | 
				
			||||||
 | 
					%include "Material.h"
 | 
				
			||||||
%include "Mesh.h"
 | 
					%include "Mesh.h"
 | 
				
			||||||
%include "Ball.h"
 | 
					%include "Ball.h"
 | 
				
			||||||
%include "Camera.h"
 | 
					%include "Camera.h"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,24 @@
 | 
				
			|||||||
#version 330 core
 | 
					#version 330 core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uniform vec3 color;
 | 
					in vec2 UV;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
out vec4 FragColor;
 | 
					out vec4 FragColor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct Material {
 | 
				
			||||||
 | 
					  vec3 color;
 | 
				
			||||||
 | 
					  bool usesColor;
 | 
				
			||||||
 | 
					  sampler2D tex;
 | 
				
			||||||
 | 
					  bool usesTex;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uniform Material material;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void main() {
 | 
					void main() {
 | 
				
			||||||
  FragColor = vec4(color, 1.0);  
 | 
					  FragColor = vec4(0.0);
 | 
				
			||||||
 | 
					  if (material.usesColor) {
 | 
				
			||||||
 | 
					    FragColor += vec4(material.color, 1.0);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (material.usesTex) {
 | 
				
			||||||
 | 
					    FragColor += texture(material.tex, UV);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,15 @@
 | 
				
			|||||||
#version 330 core
 | 
					#version 330 core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
layout (location = 0) in vec3 pos;
 | 
					layout (location = 0) in vec3 pos;
 | 
				
			||||||
 | 
					layout (location = 1) in vec2 uv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uniform mat4 MODEL;
 | 
					uniform mat4 MODEL;
 | 
				
			||||||
uniform mat4 VIEW;
 | 
					uniform mat4 VIEW;
 | 
				
			||||||
uniform mat4 PROJECTION;
 | 
					uniform mat4 PROJECTION;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					out vec2 UV;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void main() {
 | 
					void main() {
 | 
				
			||||||
  gl_Position = PROJECTION * VIEW * MODEL * vec4(pos, 1.0);
 | 
					  gl_Position = PROJECTION * VIEW * MODEL * vec4(pos, 1.0);
 | 
				
			||||||
 | 
					  UV = uv;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								thirdparty/CMakeLists.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								thirdparty/CMakeLists.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					project(Couch)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					target_include_directories(couch
 | 
				
			||||||
 | 
					  PUBLIC stb)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					target_include_directories(couchlua
 | 
				
			||||||
 | 
					  PUBLIC stb)
 | 
				
			||||||
							
								
								
									
										1
									
								
								thirdparty/stb/.#CMakeLists.txt
									
									
									
									
										vendored
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								thirdparty/stb/.#CMakeLists.txt
									
									
									
									
										vendored
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					dane@sweetdee.1314:1610908086
 | 
				
			||||||
							
								
								
									
										1
									
								
								thirdparty/stb/CMakeLists.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								thirdparty/stb/CMakeLists.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					Project(stb)
 | 
				
			||||||
							
								
								
									
										7762
									
								
								thirdparty/stb/stb_image.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7762
									
								
								thirdparty/stb/stb_image.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user