|  | // Copyright 2016 The SwiftShader Authors. All Rights Reserved. | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //    http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | #ifndef gl_Device_hpp | 
|  | #define gl_Device_hpp | 
|  |  | 
|  | #include "Renderer/Renderer.hpp" | 
|  |  | 
|  | namespace egl | 
|  | { | 
|  | class Image; | 
|  | } | 
|  |  | 
|  | namespace es1 | 
|  | { | 
|  | class Texture; | 
|  |  | 
|  | struct Viewport | 
|  | { | 
|  | int x0; | 
|  | int y0; | 
|  | unsigned int width; | 
|  | unsigned int height; | 
|  | float minZ; | 
|  | float maxZ; | 
|  | }; | 
|  |  | 
|  | class Device : public sw::Renderer | 
|  | { | 
|  | public: | 
|  | explicit Device(sw::Context *context); | 
|  |  | 
|  | virtual ~Device(); | 
|  |  | 
|  | void *operator new(size_t size); | 
|  | void operator delete(void * mem); | 
|  |  | 
|  | void clearColor(float red, float green, float blue, float alpha, unsigned int rgbaMask); | 
|  | void clearDepth(float z); | 
|  | void clearStencil(unsigned int stencil, unsigned int mask); | 
|  | void drawIndexedPrimitive(sw::DrawType type, unsigned int indexOffset, unsigned int primitiveCount); | 
|  | void drawPrimitive(sw::DrawType type, unsigned int primiveCount); | 
|  | void setScissorEnable(bool enable); | 
|  | void setRenderTarget(int index, egl::Image *renderTarget); | 
|  | void setDepthBuffer(egl::Image *depthBuffer); | 
|  | void setStencilBuffer(egl::Image *stencilBuffer); | 
|  | void setScissorRect(const sw::Rect &rect); | 
|  | void setViewport(const Viewport &viewport); | 
|  |  | 
|  | bool stretchRect(sw::Surface *sourceSurface, const sw::SliceRect *sourceRect, sw::Surface *destSurface, const sw::SliceRect *destRect, bool filter); | 
|  | void finish(); | 
|  |  | 
|  | private: | 
|  | sw::Context *const context; | 
|  |  | 
|  | bool bindResources(); | 
|  | bool bindViewport();   // Also adjusts for scissoring | 
|  |  | 
|  | bool validRectangle(const sw::Rect *rect, sw::Surface *surface); | 
|  |  | 
|  | Viewport viewport; | 
|  | sw::Rect scissorRect; | 
|  | bool scissorEnable; | 
|  |  | 
|  | egl::Image *renderTarget; | 
|  | egl::Image *depthBuffer; | 
|  | egl::Image *stencilBuffer; | 
|  | }; | 
|  | } | 
|  |  | 
|  | #endif   // gl_Device_hpp |