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 void *operator new(size_t size); 47 void operator delete(void * mem); 48 49 void clearColor(float red, float green, float blue, float alpha, unsigned int rgbaMask); 50 void clearDepth(float z); 51 void clearStencil(unsigned int stencil, unsigned int mask); 52 void drawIndexedPrimitive(sw::DrawType type, unsigned int indexOffset, unsigned int primitiveCount); 53 void drawPrimitive(sw::DrawType type, unsigned int primiveCount); 54 void setScissorEnable(bool enable); 55 void setRenderTarget(int index, egl::Image *renderTarget); 56 void setDepthBuffer(egl::Image *depthBuffer); 57 void setStencilBuffer(egl::Image *stencilBuffer); 58 void setScissorRect(const sw::Rect &rect); 59 void setViewport(const Viewport &viewport); 60 61 bool stretchRect(sw::Surface *sourceSurface, const sw::SliceRect *sourceRect, sw::Surface *destSurface, const sw::SliceRect *destRect, bool filter); 62 void finish(); 63 64 private: 65 sw::Context *const context; 66 67 bool bindResources(); 68 bool bindViewport(); // Also adjusts for scissoring 69 70 bool validRectangle(const sw::Rect *rect, sw::Surface *surface); 71 72 Viewport viewport; 73 sw::Rect scissorRect; 74 bool scissorEnable; 75 76 egl::Image *renderTarget; 77 egl::Image *depthBuffer; 78 egl::Image *stencilBuffer; 79 }; 80 } 81 82 #endif // gl_Device_hpp 83