/* * Copyright (C) 2011 The Android Open Source Project * * 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 RSD_GL_H #define RSD_GL_H #include #include #define RSD_CALL_GL(x, ...) rsc->setWatchdogGL(#x, __LINE__, __FILE__); x(__VA_ARGS__); rsc->setWatchdogGL(NULL, 0, NULL) class RsdShaderCache; class RsdVertexArrayState; class RsdFrameBufferObj; typedef void (* InvokeFunc_t)(void); typedef void (*WorkerCallback_t)(void *usr, uint32_t idx); typedef struct RsdGLRec { struct { EGLint numConfigs; EGLint majorVersion; EGLint minorVersion; EGLConfig config; EGLContext context; EGLSurface surface; EGLSurface surfaceDefault; EGLDisplay display; } egl; struct { const uint8_t * vendor; const uint8_t * renderer; const uint8_t * version; const uint8_t * extensions; uint32_t majorVersion; uint32_t minorVersion; int32_t maxVaryingVectors; int32_t maxTextureImageUnits; int32_t maxFragmentTextureImageUnits; int32_t maxFragmentUniformVectors; int32_t maxVertexAttribs; int32_t maxVertexUniformVectors; int32_t maxVertexTextureUnits; bool OES_texture_npot; bool IMG_texture_npot; bool NV_texture_npot_2D_mipmap; float EXT_texture_max_aniso; } gl; ANativeWindow *wndSurface; uint32_t width; uint32_t height; RsdShaderCache *shaderCache; RsdVertexArrayState *vertexArrayState; RsdFrameBufferObj *currentFrameBuffer; } RsdGL; bool rsdGLInit(const android::renderscript::Context *rsc); void rsdGLShutdown(const android::renderscript::Context *rsc); bool rsdGLSetSurface(const android::renderscript::Context *rsc, uint32_t w, uint32_t h, RsNativeWindow sur); void rsdGLSwap(const android::renderscript::Context *rsc); void rsdGLCheckError(const android::renderscript::Context *rsc, const char *msg, bool isFatal = false); #endif