V-Gears 0
Free Final Fantasy VII engine.
VGearsManualObject.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2022 The V-Gears Team
3 *
4 * This file is part of V-Gears
5 *
6 * V-Gears is free software: you can redistribute it and/or modify it under
7 * terms of the GNU General Public License as published by the Free Software
8 * Foundation, version 3.0 (GPLv3) of the License.
9 *
10 * V-Gears is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15#pragma once
16
17#include <OgreColourValue.h>
18#include <OgreMesh.h>
19#include <OgreSubMesh.h>
20#include <Ogre.h>
21#include "common/TypeDefine.h"
22
23namespace VGears{
24
33
34 public:
35
41 explicit ManualObject(Ogre::Mesh *mesh);
42
46 virtual ~ManualObject();
47
52
57
62
67
72
77 };
78
90 virtual void begin(
91 const String &name, const String &material_name,
92 size_t vertex_count, size_t index_count
93 );
94
101 virtual void position(const Ogre::Vector3 &position);
102
109 virtual void normal(const Ogre::Vector3 &normal);
110
117 virtual void colour(const Ogre::ColourValue &colour);
118
125 virtual void textureCoord(const Ogre::Vector2 &texture_coordinate);
126
133 virtual void index( const uint32 idx );
134
143 virtual void bone(
144 const uint32 idx, const uint16 bone_handle,
145 const Ogre::Real weight = 1
146 );
147
156 virtual void end();
157
158 protected:
159
168 template<typename BufferType>
169 BufferType* createBuffer(
170 const BufferBinding binding, Ogre::VertexElementType type,
171 Ogre::VertexElementSemantic semantic
172 );
173
177 virtual void createPositionBuffer();
178
182 virtual void createNormalBuffer();
183
187 virtual void createColourBuffer();
188
192 virtual void createTextureCoordinateBuffer();
193
197 virtual void createIndexBuffer();
198
202 virtual void resetBuffers();
203
209 template<typename BufferSharedPtr>
210 void resetBuffer(BufferSharedPtr &buffer) const;
211
212 private:
213
214 typedef Ogre::HardwareVertexBufferSharedPtr VertexBuffer;
215
216 typedef Ogre::HardwareIndexBufferSharedPtr IndexBuffer;
217
221 Ogre::Mesh *_mesh;
222
226 Ogre::SubMesh *_section;
227
231 Ogre::AxisAlignedBox _bbox;
232
236 Ogre::Real _radius;
237
242
247
251 Ogre::Vector3 *_position;
252
256 Ogre::Vector3 *_normal;
257
262
266 Ogre::Vector2 *_texture_coordinate;
267
272
276 const Ogre::VertexElementType colour_type_;
277 };
278}
A manually handled object.
Definition: VGearsManualObject.h:32
virtual void createNormalBuffer()
Creates a normal buffer in {.
Definition: VGearsManualObject.cpp:68
VertexBuffer _vertex_buffers[BINDING_COUNT]
The object vetex buffer.
Definition: VGearsManualObject.h:241
void resetBuffer(BufferSharedPtr &buffer) const
Resets any of the buffers in {.
Definition: VGearsManualObject.cpp:100
virtual void createColourBuffer()
Creates a colour buffer in {.
Definition: VGearsManualObject.cpp:74
virtual void resetBuffers()
Resets all buffers in {.
Definition: VGearsManualObject.cpp:106
Ogre::Vector2 * _texture_coordinate
The texture buffer.
Definition: VGearsManualObject.h:266
virtual void createTextureCoordinateBuffer()
Creates a texture coordinate buffer in {.
Definition: VGearsManualObject.cpp:80
Ogre::SubMesh * _section
The currently open section.
Definition: VGearsManualObject.h:226
uint16 * _index
The object index.
Definition: VGearsManualObject.h:271
Ogre::Real _radius
Definition: VGearsManualObject.h:236
IndexBuffer _indexbuffer_
The index buffer.
Definition: VGearsManualObject.h:246
Ogre::Vector3 * _normal
The normal buffer.
Definition: VGearsManualObject.h:256
virtual void textureCoord(const Ogre::Vector2 &texture_coordinate)
Sets the object texture coordinates.
Definition: VGearsManualObject.cpp:174
Ogre::HardwareVertexBufferSharedPtr VertexBuffer
Definition: VGearsManualObject.h:214
BufferBinding
Buffer indexes for object properties.
Definition: VGearsManualObject.h:51
@ BB_TEXTURE
Object texture.
Definition: VGearsManualObject.h:71
@ BB_POSITION
Object position.
Definition: VGearsManualObject.h:56
@ BB_NORMAL
Object normal.
Definition: VGearsManualObject.h:61
@ BINDING_COUNT
Number of binds for the object.
Definition: VGearsManualObject.h:76
@ BB_COLOUR
Object colour.
Definition: VGearsManualObject.h:66
uint32 * colour_
The colour buffer.
Definition: VGearsManualObject.h:261
BufferType * createBuffer(const BufferBinding binding, Ogre::VertexElementType type, Ogre::VertexElementSemantic semantic)
Creates a buffer.
Definition: VGearsManualObject.cpp:39
Ogre::HardwareIndexBufferSharedPtr IndexBuffer
Definition: VGearsManualObject.h:216
Ogre::Vector3 * _position
The position buffer.
Definition: VGearsManualObject.h:251
virtual void createIndexBuffer()
Creates a index buffer in {.
Definition: VGearsManualObject.cpp:86
virtual void position(const Ogre::Vector3 &position)
Sets the object position.
Definition: VGearsManualObject.cpp:156
virtual void index(const uint32 idx)
Sets the object index.
Definition: VGearsManualObject.cpp:179
virtual void end()
End the current section.
Definition: VGearsManualObject.cpp:194
Ogre::Mesh * _mesh
The object mesh.
Definition: VGearsManualObject.h:221
virtual void createPositionBuffer()
Creates a position buffer in {.
Definition: VGearsManualObject.cpp:62
virtual void normal(const Ogre::Vector3 &normal)
Sets the object normal vector.
Definition: VGearsManualObject.cpp:163
Ogre::AxisAlignedBox _bbox
Definition: VGearsManualObject.h:231
virtual ~ManualObject()
Destructor.
Definition: VGearsManualObject.cpp:36
const Ogre::VertexElementType colour_type_
The colour type.
Definition: VGearsManualObject.h:276
virtual void begin(const String &name, const String &material_name, size_t vertex_count, size_t index_count)
Begins creating a object section.
Definition: VGearsManualObject.cpp:116
ManualObject(Ogre::Mesh *mesh)
Constructor.
Definition: VGearsManualObject.cpp:23
virtual void colour(const Ogre::ColourValue &colour)
Sets the object colour.
Definition: VGearsManualObject.cpp:168
virtual void bone(const uint32 idx, const uint16 bone_handle, const Ogre::Real weight=1)
Adds a bone to the object.
Definition: VGearsManualObject.cpp:184
Definition: FF7NameLookup.h:24
Ogre::uint16 uint16
Definition: TypeDefine.h:32
Ogre::String String
Definition: TypeDefine.h:37
Ogre::uint32 uint32
Definition: TypeDefine.h:33