1 // Copyright 2016 The SwiftShader Authors. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #ifndef gl_Device_hpp 16 #define gl_Device_hpp 17 18 #include "Renderer/Renderer.hpp" 19 20 namespace egl 21 { 22 class Image; 23 } 24 25 namespace es1 26 { 27 class Texture; 28 29 struct Viewport 30 { 31 int x0; 32 int y0; 33 unsigned int width; 34 unsigned int height; 35 float minZ; 36 float maxZ; 37 }; 38 39 class Device : public sw::Renderer 40 { 41 public: 42 explicit Device(sw::Context *context); 43 44 virtual ~Device(); 45 46 virtual void clearColor(float red, float green, float blue, float alpha, unsigned int rgbaMask); 47 virtual void clearDepth(float z); 48 virtual void clearStencil(unsigned int stencil, unsigned int mask); 49 virtual egl::Image *createDepthStencilSurface(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard); 50 virtual egl::Image *createRenderTarget(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool lockable); 51 virtual void drawIndexedPrimitive(sw::DrawType type, unsigned int indexOffset, unsigned int primitiveCount); 52 virtual void drawPrimitive(sw::DrawType type, unsigned int primiveCount); 53 virtual void setScissorEnable(bool enable); 54 virtual void setRenderTarget(int index, egl::Image *renderTarget); 55 virtual void setDepthBuffer(egl::Image *depthBuffer); 56 virtual void setStencilBuffer(egl::Image *stencilBuffer); 57 virtual void setScissorRect(const sw::Rect &rect); 58 virtual void setViewport(const Viewport &viewport); 59 60 virtual bool stretchRect(sw::Surface *sourceSurface, const sw::SliceRect *sourceRect, sw::Surface *destSurface, const sw::SliceRect *destRect, bool filter); 61 virtual void finish(); 62 63 private: 64 sw::Context *const context; 65 66 bool bindResources(); 67 bool bindViewport(); // Also adjusts for scissoring 68 69 bool validRectangle(const sw::Rect *rect, sw::Surface *surface); 70 71 Viewport viewport; 72 sw::Rect scissorRect; 73 bool scissorEnable; 74 75 egl::Image *renderTarget; 76 egl::Image *depthBuffer; 77 egl::Image *stencilBuffer; 78 }; 79 } 80 81 #endif // gl_Device_hpp 82