RenderEngine.h revision c18790018be5d7ea7061ccbc81f3044e74adc823
14b3de47071d875faaa7d419d050a464b09538797Jason Sams/* 24b3de47071d875faaa7d419d050a464b09538797Jason Sams * Copyright 2013 The Android Open Source Project 34b3de47071d875faaa7d419d050a464b09538797Jason Sams * 44b3de47071d875faaa7d419d050a464b09538797Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 54b3de47071d875faaa7d419d050a464b09538797Jason Sams * you may not use this file except in compliance with the License. 64b3de47071d875faaa7d419d050a464b09538797Jason Sams * You may obtain a copy of the License at 74b3de47071d875faaa7d419d050a464b09538797Jason Sams * 84b3de47071d875faaa7d419d050a464b09538797Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 94b3de47071d875faaa7d419d050a464b09538797Jason Sams * 104b3de47071d875faaa7d419d050a464b09538797Jason Sams * Unless required by applicable law or agreed to in writing, software 114b3de47071d875faaa7d419d050a464b09538797Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 124b3de47071d875faaa7d419d050a464b09538797Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134b3de47071d875faaa7d419d050a464b09538797Jason Sams * See the License for the specific language governing permissions and 144b3de47071d875faaa7d419d050a464b09538797Jason Sams * limitations under the License. 154b3de47071d875faaa7d419d050a464b09538797Jason Sams */ 164b3de47071d875faaa7d419d050a464b09538797Jason Sams 174b3de47071d875faaa7d419d050a464b09538797Jason Sams 184b3de47071d875faaa7d419d050a464b09538797Jason Sams#ifndef SF_RENDERENGINE_H_ 194b3de47071d875faaa7d419d050a464b09538797Jason Sams#define SF_RENDERENGINE_H_ 204b3de47071d875faaa7d419d050a464b09538797Jason Sams 214b3de47071d875faaa7d419d050a464b09538797Jason Sams#include <stdint.h> 224b3de47071d875faaa7d419d050a464b09538797Jason Sams#include <sys/types.h> 234b3de47071d875faaa7d419d050a464b09538797Jason Sams 244b3de47071d875faaa7d419d050a464b09538797Jason Sams#include <EGL/egl.h> 254b3de47071d875faaa7d419d050a464b09538797Jason Sams#include <EGL/eglext.h> 264b3de47071d875faaa7d419d050a464b09538797Jason Sams#include <ui/mat4.h> 274b3de47071d875faaa7d419d050a464b09538797Jason Sams 284b3de47071d875faaa7d419d050a464b09538797Jason Sams#define EGL_NO_CONFIG ((EGLConfig)0) 294b3de47071d875faaa7d419d050a464b09538797Jason Sams 304b3de47071d875faaa7d419d050a464b09538797Jason Sams// --------------------------------------------------------------------------- 314b3de47071d875faaa7d419d050a464b09538797Jason Samsnamespace android { 324b3de47071d875faaa7d419d050a464b09538797Jason Sams// --------------------------------------------------------------------------- 334b3de47071d875faaa7d419d050a464b09538797Jason Sams 344b3de47071d875faaa7d419d050a464b09538797Jason Samsclass String8; 354b3de47071d875faaa7d419d050a464b09538797Jason Samsclass Rect; 364b3de47071d875faaa7d419d050a464b09538797Jason Samsclass Region; 374b3de47071d875faaa7d419d050a464b09538797Jason Samsclass Mesh; 384b3de47071d875faaa7d419d050a464b09538797Jason Samsclass Texture; 39a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 40a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass RenderEngine { 41a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk enum GlesVersion { 424b3de47071d875faaa7d419d050a464b09538797Jason Sams GLES_VERSION_1_0 = 0x10000, 434b3de47071d875faaa7d419d050a464b09538797Jason Sams GLES_VERSION_1_1 = 0x10001, 444b3de47071d875faaa7d419d050a464b09538797Jason Sams GLES_VERSION_2_0 = 0x20000, 454b3de47071d875faaa7d419d050a464b09538797Jason Sams GLES_VERSION_3_0 = 0x30000, 464b3de47071d875faaa7d419d050a464b09538797Jason Sams }; 474b3de47071d875faaa7d419d050a464b09538797Jason Sams static GlesVersion parseGlesVersion(const char* str); 484b3de47071d875faaa7d419d050a464b09538797Jason Sams 49e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian EGLConfig mEGLConfig; 50e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian EGLContext mEGLContext; 51e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian void setEGLHandles(EGLConfig config, EGLContext ctxt); 52e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian 53e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian virtual void bindImageAsFramebuffer(EGLImageKHR image, uint32_t* texName, uint32_t* fbName, uint32_t* status) = 0; 54e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian virtual void unbindFramebuffer(uint32_t texName, uint32_t fbName) = 0; 55e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian 56e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopianprotected: 57e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian RenderEngine(); 58e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian virtual ~RenderEngine() = 0; 59e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian 60e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopianpublic: 61e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian static RenderEngine* create(EGLDisplay display, int hwcFormat); 62e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian 63e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian static EGLConfig chooseEglConfig(EGLDisplay display, int format); 64e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian 65e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian // dump the extension strings. always call the base class. 66e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian virtual void dump(String8& result); 67e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian 68e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian // helpers 69e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian void clearWithColor(float red, float green, float blue, float alpha); 70e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian void fillRegionWithColor(const Region& region, uint32_t height, 71e255929025c4ec3fd91518350e3e7b447c745529Mathias Agopian float red, float green, float blue, float alpha); 724b3de47071d875faaa7d419d050a464b09538797Jason Sams 734b3de47071d875faaa7d419d050a464b09538797Jason Sams // common to all GL versions 744b3de47071d875faaa7d419d050a464b09538797Jason Sams void setScissor(uint32_t left, uint32_t bottom, uint32_t right, uint32_t top); 754b3de47071d875faaa7d419d050a464b09538797Jason Sams void disableScissor(); 764b3de47071d875faaa7d419d050a464b09538797Jason Sams void genTextures(size_t count, uint32_t* names); 774b3de47071d875faaa7d419d050a464b09538797Jason Sams void deleteTextures(size_t count, uint32_t const* names); 784b3de47071d875faaa7d419d050a464b09538797Jason Sams void readPixels(size_t l, size_t b, size_t w, size_t h, uint32_t* pixels); 794b3de47071d875faaa7d419d050a464b09538797Jason Sams 804b3de47071d875faaa7d419d050a464b09538797Jason Sams class BindImageAsFramebuffer { 814b3de47071d875faaa7d419d050a464b09538797Jason Sams RenderEngine& mEngine; 824b3de47071d875faaa7d419d050a464b09538797Jason Sams uint32_t mTexName, mFbName; 834b3de47071d875faaa7d419d050a464b09538797Jason Sams uint32_t mStatus; 844b3de47071d875faaa7d419d050a464b09538797Jason Sams public: 854b3de47071d875faaa7d419d050a464b09538797Jason Sams BindImageAsFramebuffer(RenderEngine& engine, EGLImageKHR image); 864b3de47071d875faaa7d419d050a464b09538797Jason Sams ~BindImageAsFramebuffer(); 874b3de47071d875faaa7d419d050a464b09538797Jason Sams int getStatus() const; 884b3de47071d875faaa7d419d050a464b09538797Jason Sams }; 894b3de47071d875faaa7d419d050a464b09538797Jason Sams 904b3de47071d875faaa7d419d050a464b09538797Jason Sams // set-up 914b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual void checkErrors() const; 924b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual void setViewportAndProjection(size_t vpw, size_t vph, 934b3de47071d875faaa7d419d050a464b09538797Jason Sams Rect sourceCrop, size_t hwh, bool yswap) = 0; 944b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual void setupLayerBlending(bool premultipliedAlpha, bool opaque, int alpha) = 0; 954b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual void setupDimLayerBlending(int alpha) = 0; 964b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual void setupLayerTexturing(const Texture& texture) = 0; 974b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual void setupLayerBlackedOut() = 0; 984b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual void setupFillWithColor(float r, float g, float b, float a) = 0; 994b3de47071d875faaa7d419d050a464b09538797Jason Sams 1004b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual void disableTexturing() = 0; 1014b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual void disableBlending() = 0; 1024b3de47071d875faaa7d419d050a464b09538797Jason Sams 1034b3de47071d875faaa7d419d050a464b09538797Jason Sams // drawing 1044b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual void drawMesh(const Mesh& mesh) = 0; 1054b3de47071d875faaa7d419d050a464b09538797Jason Sams 1064b3de47071d875faaa7d419d050a464b09538797Jason Sams // grouping 1074b3de47071d875faaa7d419d050a464b09538797Jason Sams // creates a color-transform group, everything drawn in the group will be 1084b3de47071d875faaa7d419d050a464b09538797Jason Sams // transformed by the given color transform when endGroup() is called. 1094b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual void beginGroup(const mat4& colorTransform) = 0; 1104b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual void endGroup() = 0; 1114b3de47071d875faaa7d419d050a464b09538797Jason Sams 1124b3de47071d875faaa7d419d050a464b09538797Jason Sams // queries 1134b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual size_t getMaxTextureSize() const = 0; 1144b3de47071d875faaa7d419d050a464b09538797Jason Sams virtual size_t getMaxViewportDims() const = 0; 1154b3de47071d875faaa7d419d050a464b09538797Jason Sams 1164b3de47071d875faaa7d419d050a464b09538797Jason Sams EGLConfig getEGLConfig() const; 1174b3de47071d875faaa7d419d050a464b09538797Jason Sams EGLContext getEGLContext() const; 1184b3de47071d875faaa7d419d050a464b09538797Jason Sams}; 1194b3de47071d875faaa7d419d050a464b09538797Jason Sams 1204b3de47071d875faaa7d419d050a464b09538797Jason Sams// --------------------------------------------------------------------------- 1214b3de47071d875faaa7d419d050a464b09538797Jason Sams}; // namespace android 1224b3de47071d875faaa7d419d050a464b09538797Jason Sams// --------------------------------------------------------------------------- 1234b3de47071d875faaa7d419d050a464b09538797Jason Sams 12467605d7185c384469952b10d75c3d201b19cc07fMathias Agopian#endif /* SF_RENDERENGINE_H_ */ 12567605d7185c384469952b10d75c3d201b19cc07fMathias Agopian