| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #pragma once
- //========================================================================
- // File: Mesh.h - classes to render meshes in D3D9 and D3D11
- //
- // Part of the GameCode4 Application
- //
- // GameCode4 is the sample application that encapsulates much of the source code
- // discussed in "Game Coding Complete - 4th Edition" by Mike McShaffry and David
- // "Rez" Graham, published by Charles River Media.
- // ISBN-10: 1133776574 | ISBN-13: 978-1133776574
- //
- // If this source code has found it's way to you, and you think it has helped you
- // in any way, do the authors a favor and buy a new copy of the book - there are
- // detailed explanations in it that compliment this code well. Buy a copy at Amazon.com
- // by clicking here:
- // http://www.amazon.com/gp/product/1133776574/ref=olp_product_details?ie=UTF8&me=&seller=
- //
- // There's a companion web site at http://www.mcshaffry.com/GameCode/
- //
- // The source code is managed and maintained through Google Code:
- // http://code.google.com/p/gamecode4/
- //
- // (c) Copyright 2012 Michael L. McShaffry and David Graham
- //
- // This program is free software; you can redistribute it and/or
- // modify it under the terms of the GNU Lesser GPL v3
- // as published by the Free Software Foundation.
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- // http://www.gnu.org/licenses/lgpl-3.0.txt for more details.
- //
- // You should have received a copy of the GNU Lesser GPL v3
- // along with this program; if not, write to the Free Software
- // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- //
- //========================================================================
- #include "Geometry.h"
- #include "SceneNodes.h"
- #include "Material.h"
- #include "Shaders.h"
- #include "../ResourceCache/ResCache.h"
- #include <assimp/cimport.h>
- #include <assimp/scene.h>
- #include <assimp/postprocess.h>
- //
- // class D3DSdkMeshResourceExtraData11 - Chapter 16, page 561
- //
- class OpenGLGlbMeshResourceExtraData : public IResourceExtraData
- {
- friend class GlbMeshResourceLoader;
- public:
- OpenGLGlbMeshResourceExtraData() { }
- virtual ~OpenGLGlbMeshResourceExtraData() { if (m_pScene) aiReleaseImport(m_pScene); }
- virtual std::string VToString() { return "OpenGLGlbMeshResourceExtraData"; }
- const aiScene* m_pScene;
- };
- //
- // class SdkMeshResourceLoader - Chapter 16, page 561
- //
- class GlbMeshResourceLoader : public IResourceLoader
- {
- public:
- virtual bool VUseRawFile() { return false; }
- virtual bool VDiscardRawBufferAfterLoad() { return false; }
- virtual unsigned int VGetLoadedResourceSize(char *rawBuffer, unsigned int rawSize);
- virtual bool VLoadResource(char *rawBuffer, unsigned int rawSize, std::shared_ptr<ResHandle> handle);
- virtual std::string VGetPattern() { return "*.glb"; }
- };
- ////////////////////////////////////////////////////
- //
- // class TeapotMeshNode9 - Chapter X, page Y
- //
- ////////////////////////////////////////////////////
- class OpenGLShaderMeshNode : public SceneNode
- {
- public:
- OpenGLShaderMeshNode(const ActorId actorId,
- WeakBaseRenderComponentPtr renderComponent,
- std::string meshFileName,
- RenderPass renderPass,
- const glm::mat4 t);
- virtual int VOnRestore(Scene *pScene);
- virtual int VOnLostDevice(Scene *pScene) { return 0; }
- virtual int VRender(Scene *pScene);
- // virtual int VPick(Scene *pScene, RayCast *pRayCast);
-
- protected:
- std::string m_meshFileName;
- GLuint *m_vao;
- GLuint *m_vbo;
- GLuint *m_ebo;
- size_t *m_numIndices;
- size_t *m_numVerts;
- size_t m_numMeshes;
- OpenGLShaderProgram m_ShaderProgram;
- };
- class OpenGLTeapotMeshNode : public OpenGLShaderMeshNode
- {
- public:
- OpenGLTeapotMeshNode(const ActorId actorId, WeakBaseRenderComponentPtr renderComponent, RenderPass renderPass, glm::mat4 t)
- : OpenGLShaderMeshNode(actorId, renderComponent, "art/3d assets/fantasy town kit/models/gltf format/hedge.glb", renderPass, t) { }
- bool VIsVisible() { return true; }
- };
|