ScummVM API documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
openglactor.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef STARK_GFX_OPENGL_ACTOR_H
23 #define STARK_GFX_OPENGL_ACTOR_H
24 
25 #include "engines/stark/gfx/renderentry.h"
26 #include "engines/stark/visual/actor.h"
27 #include "engines/stark/gfx/opengl.h"
28 
29 #include "common/hashmap.h"
30 #include "common/hash-ptr.h"
31 
32 #include "graphics/opengl/system_headers.h"
33 
34 #if defined(USE_OPENGL_GAME)
35 
36 namespace Stark {
37 namespace Gfx {
38 
39 class OpenGLDriver;
40 
41 struct _ActorVertex {
42  float pos1x;
43  float pos1y;
44  float pos1z;
45  float pos2x;
46  float pos2y;
47  float pos2z;
48  uint32 bone1;
49  uint32 bone2;
50  float boneWeight;
51  float normalx;
52  float normaly;
53  float normalz;
54  float texS;
55  float texT;
56  float x;
57  float y;
58  float z;
59  float nx;
60  float ny;
61  float nz;
62  float sx;
63  float sy;
64  float sz;
65  float r;
66  float g;
67  float b;
68 };
69 typedef _ActorVertex ActorVertex;
70 
71 class OpenGLActorRenderer : public VisualActor {
72 public:
73  OpenGLActorRenderer(OpenGLDriver *gfx);
74  virtual ~OpenGLActorRenderer();
75 
76  void render(const Math::Vector3d &position, float direction, const LightEntryArray &lights) override;
77 
78 protected:
79  typedef Common::HashMap<Face *, uint32 *> FaceBufferMap;
80 
81  OpenGLDriver *_gfx;
82 
83  ActorVertex *_faceVBO;
84  FaceBufferMap _faceEBO;
85 
86  void clearVertices();
87  void uploadVertices();
88  ActorVertex *createModelVBO(const Model *model);
89  uint32 *createFaceEBO(const Face *face);
90  void setLightArrayUniform(const LightEntryArray &lights);
91 
92  Math::Vector3d getShadowLightDirection(const LightEntryArray &lights, const Math::Vector3d &actorPosition, Math::Matrix3 worldToModelRot);
93 
94  bool getPointLightContribution(LightEntry *light, const Math::Vector3d &actorPosition,
95  Math::Vector3d &direction, float weight = 1.0f);
96  bool getDirectionalLightContribution(LightEntry *light, Math::Vector3d &direction);
97  bool getSpotLightContribution(LightEntry *light, const Math::Vector3d &actorPosition, Math::Vector3d &direction);
98 };
99 
100 } // End of namespace Gfx
101 } // End of namespace Stark
102 
103 #endif // defined(USE_OPENGL_GAME)
104 
105 #endif // STARK_GFX_OPENGL_ACTOR_H
Definition: console.h:27