1 /* 2 Copyright (c) 2013 yvt 3 4 This file is part of OpenSpades. 5 6 OpenSpades is free software: you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 OpenSpades is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with OpenSpades. If not, see <http://www.gnu.org/licenses/>. 18 19 */ 20 21 #include <cstdint> 22 23 #include "IGLDevice.h" 24 #include "IGLShadowMapRenderer.h" 25 26 namespace spades { 27 namespace draw { 28 class GLRenderer; 29 class GLShadowShader; 30 class GLSettings; 31 class GLSparseShadowMapRenderer : public IGLShadowMapRenderer { 32 friend class GLShadowMapShader; 33 friend class GLShadowShader; 34 35 struct ModelRenderer; 36 struct Internal; 37 38 enum { Tiles = 64 }; 39 40 IGLDevice *device; 41 GLSettings &settings; 42 43 int textureSize; 44 int minLod; 45 int maxLod; 46 47 uint32_t pagetable[Tiles][Tiles]; 48 49 IGLDevice::UInteger framebuffer; 50 IGLDevice::UInteger texture; 51 IGLDevice::UInteger pagetableTexture; 52 53 // not used, but required 54 IGLDevice::UInteger colorTexture; 55 56 Matrix4 matrix; 57 OBB3 obb; 58 float vpWidth, vpHeight; // used for culling 59 60 void BuildMatrix(float near, float far); 61 62 protected: 63 void RenderShadowMapPass() override; 64 65 public: 66 GLSparseShadowMapRenderer(GLRenderer *); 67 ~GLSparseShadowMapRenderer(); 68 void Render() override; 69 70 bool Cull(const AABB3 &) override; 71 bool SphereCull(const Vector3 ¢er, float rad) override; 72 }; 73 } 74 } 75