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 #pragma once 22 23 #include <cstdint> 24 #include <vector> 25 26 #include "IGLDevice.h" 27 28 namespace spades { 29 namespace client { 30 class GameMap; 31 } 32 namespace draw { 33 class GLRenderer; 34 class GLRadiosityRenderer; 35 /** Generates a shadow map of the game map. */ 36 class GLMapShadowRenderer { 37 friend class GLRadiosityRenderer; 38 39 enum { CoarseSize = 8, CoarseBits = 3 }; 40 41 GLRenderer *renderer; 42 IGLDevice *device; 43 client::GameMap *map; 44 IGLDevice::UInteger texture; 45 IGLDevice::UInteger coarseTexture; 46 47 int w, h, d; 48 49 size_t updateBitmapPitch; 50 std::vector<uint32_t> updateBitmap; 51 52 std::vector<uint32_t> bitmap; 53 std::vector<uint32_t> coarseBitmap; 54 55 uint32_t GeneratePixel(int x, int y); 56 void MarkUpdate(int x, int y); 57 58 public: 59 GLMapShadowRenderer(GLRenderer *renderer, client::GameMap *map); 60 ~GLMapShadowRenderer(); 61 62 void GameMapChanged(int x, int y, int z, client::GameMap *); 63 64 void Update(); 65 GetTexture()66 IGLDevice::UInteger GetTexture() { return texture; } GetCoarseTexture()67 IGLDevice::UInteger GetCoarseTexture() { return coarseTexture; } 68 }; 69 } 70 }