#pragma once #include #include "Renderable.h" #include "PoseableBatch.h" #include "VertexFragmentShaderProgram.h" #include "TextureRenderable.h" namespace charcoal { namespace builtin { using namespace glm; typedef vec3 Position; typedef vec3 Normal; typedef vec4 ColorRGBA; typedef vec3 ColorRGB; typedef vec2 UV; typedef unsigned int Index; // Shader Data Types struct Light { typedef vec3 Power; typedef vec3 Fade; Light( const Position& position, const Power& power, const ColorRGB& ambient, const ColorRGB& diffuse, const ColorRGB& specular, const Fade& fade ) : position(position), power(power), ambient(ambient), diffuse(diffuse), specular(specular), fade(fade) {} Position position; Power power; ColorRGB ambient; ColorRGB diffuse; ColorRGB specular; Fade fade; }; struct Material { Material( float ambient = 1.0f, float diffuse = 1.0f, float specular = 0.0f, float specular_exponent = 1.0f ) : ambient(ambient), diffuse(diffuse), specular(specular), specular_exponent(specular_exponent) {} float ambient; float diffuse; float specular; float specular_exponent; }; // Generic Vertices struct PVertex { void set_position(const Position& position) { this->position = position; } Position position; }; struct PNMVertex { void set_position(const Position& position) { this->position = position; } void set_normal(const Normal& normal) { this->normal = normal; } void set_material(const Material& material) { this->material = material; } Position position; Normal normal; Material material; }; struct PTVertex { void set_position(const Position& position) { this->position = position; } void set_uv(const UV& uv) { this->uv = uv; } Position position; UV uv; }; } }