scg3  0.6
MaterialCore.h
Go to the documentation of this file.
1 
10 /*
11  * Copyright 2014 Volker Ahlers
12  *
13  * Licensed under the Apache License, Version 2.0 (the "License");
14  * you may not use this file except in compliance with the License.
15  * You may obtain a copy of the License at
16  *
17  * http://www.apache.org/licenses/LICENSE-2.0
18  *
19  * Unless required by applicable law or agreed to in writing, software
20  * distributed under the License is distributed on an "AS IS" BASIS,
21  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22  * See the License for the specific language governing permissions and
23  * limitations under the License.
24  */
25 
26 #ifndef MATERIALCORE_H_
27 #define MATERIALCORE_H_
28 
29 #include "scg_glew.h"
30 #include "Core.h"
31 #include "scg_glm.h"
32 #include "scg_internals.h"
33 
34 namespace scg {
35 
36 
44 class MaterialCore: public Core {
45 
46 public:
47 
51  MaterialCore();
52 
56  virtual ~MaterialCore();
57 
61  static MaterialCoreSP create();
62 
67  MaterialCore* setEmission(const glm::vec4& color);
68 
73  MaterialCore* setAmbient(const glm::vec4& color);
74 
79  MaterialCore* setAmbientAndDiffuse(const glm::vec4& color);
80 
85  MaterialCore* setDiffuse(const glm::vec4& color);
86 
91  MaterialCore* setSpecular(const glm::vec4& color);
92 
97  MaterialCore* setShininess(GLfloat shininess);
98 
102  void init();
103 
107  virtual void render(RenderState* renderState);
108 
112  virtual void renderPost(RenderState* renderState);
113 
114 public:
115 
116  // parameters for uniform buffer object (UBO)
117  static const size_t FLOAT_SIZE = 4;
118  static const size_t VEC4_SIZE = 16;
119  static const size_t EMISSION_OFFSET = 0;
120  static const size_t AMBIENT_OFFSET = 16;
121  static const size_t DIFFUSE_OFFSET = 32;
122  static const size_t SPECULAR_OFFSET = 48;
123  static const size_t SHININESS_OFFSET = 64;
124  static const size_t BUFFER_SIZE = 80;
125 
126 protected:
127 
128  GLuint ubo_; // uniform buffer object
129  GLint uboOld_;
130  glm::vec4 emission_;
131  glm::vec4 ambient_;
132  glm::vec4 diffuse_;
133  glm::vec4 specular_;
134  GLfloat shininess_;
135 
136 };
137 
138 
139 } /* namespace scg */
140 
141 #endif /* MATERIALCORE_H_ */
static const size_t BUFFER_SIZE
Definition: MaterialCore.h:124
static const size_t SHININESS_OFFSET
Definition: MaterialCore.h:123
MaterialCore * setAmbientAndDiffuse(const glm::vec4 &color)
static const size_t AMBIENT_OFFSET
Definition: MaterialCore.h:120
Local header file for GLM OpenGL Mathematics library.
static const size_t FLOAT_SIZE
Definition: MaterialCore.h:117
MaterialCore * setDiffuse(const glm::vec4 &color)
static MaterialCoreSP create()
Base class for all cores (abstract).
Definition: Core.h:36
MaterialCore * setShininess(GLfloat shininess)
static const size_t VEC4_SIZE
Definition: MaterialCore.h:118
A core to set material properties for lighting to be applied to subsequent geometry.
Definition: MaterialCore.h:44
glm::vec4 ambient_
Definition: MaterialCore.h:131
Local header file for GLEW library.
MaterialCore * setAmbient(const glm::vec4 &color)
MaterialCore * setSpecular(const glm::vec4 &color)
virtual ~MaterialCore()
static const size_t EMISSION_OFFSET
Definition: MaterialCore.h:119
glm::vec4 diffuse_
Definition: MaterialCore.h:132
MaterialCore * setEmission(const glm::vec4 &color)
The central render state that collects information about the current shader, transformations,...
Definition: RenderState.h:107
static const size_t SPECULAR_OFFSET
Definition: MaterialCore.h:122
Definition: Animation.h:28
Internal definitions required by most classes.
Base class for all cores (abstract).
glm::vec4 specular_
Definition: MaterialCore.h:133
static const size_t DIFFUSE_OFFSET
Definition: MaterialCore.h:121
virtual void render(RenderState *renderState)
virtual void renderPost(RenderState *renderState)
glm::vec4 emission_
Definition: MaterialCore.h:130