ScummVM API documentation
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  float a;
69 };
70 typedef _ActorVertex ActorVertex;
71 
72 class OpenGLActorRenderer : public VisualActor {
73 public:
74  OpenGLActorRenderer(OpenGLDriver *gfx);
75  virtual ~OpenGLActorRenderer();
76 
77  void render(const Math::Vector3d &position, float direction, const LightEntryArray &lights) override;
78 
79 protected:
80  typedef Common::HashMap<Face *, uint32 *> FaceBufferMap;
81 
82  OpenGLDriver *_gfx;
83 
84  ActorVertex *_faceVBO;
85  FaceBufferMap _faceEBO;
86 
87  void clearVertices();
88  void uploadVertices();
89  ActorVertex *createModelVBO(const Model *model);
90  uint32 *createFaceEBO(const Face *face);
91  void setLightArrayUniform(const LightEntryArray &lights);
92 
93  Math::Vector3d getShadowLightDirection(const LightEntryArray &lights, const Math::Vector3d &actorPosition, Math::Matrix3 worldToModelRot);
94 
95  bool getPointLightContribution(LightEntry *light, const Math::Vector3d &actorPosition,
96  Math::Vector3d &direction, float weight = 1.0f);
97  bool getDirectionalLightContribution(LightEntry *light, Math::Vector3d &direction);
98  bool getSpotLightContribution(LightEntry *light, const Math::Vector3d &actorPosition, Math::Vector3d &direction);
99 };
100 
101 } // End of namespace Gfx
102 } // End of namespace Stark
103 
104 #endif // defined(USE_OPENGL_GAME)
105 
106 #endif // STARK_GFX_OPENGL_ACTOR_H
Definition: console.h:27