rsContext.cpp revision 326e0ddf89e8df2837752fbfd7a014814b32082c
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsDevice.h" 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsContext.h" 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsThreadIO.h" 20326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 21326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android; 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript; 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 25326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsContext * Context::gCon = NULL; 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::initEGL() 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mNumConfigs = -1; 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams EGLint s_configAttribs[] = { 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams EGL_RED_SIZE, 5, 34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams EGL_GREEN_SIZE, 6, 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams EGL_BLUE_SIZE, 5, 36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams EGL_DEPTH_SIZE, 16, 37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams EGL_NONE 38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams }; 39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("EGL 1"); 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("EGL 2 %p", mDisplay); 43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglInitialize(mDisplay, &mMajorVersion, &mMinorVersion); 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("EGL 3 %i %i", mMajorVersion, mMinorVersion); 45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglChooseConfig(mDisplay, s_configAttribs, &mConfig, 1, &mNumConfigs); 46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("EGL 4 %p", mConfig); 47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mWndSurface) { 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mSurface = eglCreateWindowSurface(mDisplay, mConfig, 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams new EGLNativeWindowSurface(mWndSurface), 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams NULL); 52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } else { 53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mSurface = eglCreateWindowSurface(mDisplay, mConfig, 54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams android_createDisplaySurface(), 55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams NULL); 56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("EGL 5"); 59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mContext = eglCreateContext(mDisplay, mConfig, NULL, NULL); 60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglMakeCurrent(mDisplay, mSurface, mSurface, mContext); 61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglQuerySurface(mDisplay, mSurface, EGL_WIDTH, &mWidth); 62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglQuerySurface(mDisplay, mSurface, EGL_HEIGHT, &mHeight); 63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("EGL 9"); 64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 66326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 67326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::runRootScript() 68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsAssert(mRootScript->mIsRoot); 70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glViewport(0, 0, 320, 480); 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams float aspectH = 480.f / 320.f; 73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if(mRootScript->mIsOrtho) { 75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_PROJECTION); 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glLoadIdentity(); 77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glOrthof(0, 320, 0, 480, 0, 1); 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_MODELVIEW); 79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } else { 80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_PROJECTION); 81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glLoadIdentity(); 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glFrustumf(-1, 1, -aspectH, aspectH, 1, 100); 83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glRotatef(-90, 0,0,1); 84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glTranslatef(0, 0, -3); 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_MODELVIEW); 86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_MODELVIEW); 89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glLoadIdentity(); 90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glDepthMask(GL_TRUE); 92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClearColor(mRootScript->mClearColor[0], 95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRootScript->mClearColor[1], 96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRootScript->mClearColor[2], 97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRootScript->mClearColor[3]); 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClearDepthf(mRootScript->mClearDepth); 99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClear(GL_COLOR_BUFFER_BIT); 100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClear(GL_DEPTH_BUFFER_BIT); 101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRootScript->run(this, 0); 103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 106326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setupCheck() 107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mFragmentStore.get()) { 109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mFragmentStore->setupGL(); 110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mFragment.get()) { 112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mFragment->setupGL(); 113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mVertex.get()) { 115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mVertex->setupGL(); 116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 121326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid * Context::threadProc(void *vrsc) 122326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Context *rsc = static_cast<Context *>(vrsc); 124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("TP 1"); 126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams gIO = new ThreadIO(); 127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mServerCommands.init(128); 129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mServerReturns.init(128); 130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->initEGL(); 132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("TP 2"); 134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mRunning = true; 136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams while (!rsc->mExit) { 137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams gIO->playCoreCommands(rsc); 138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (!rsc->mRootScript.get()) { 140326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams continue; 141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 142326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glColor4f(1,1,1,1); 145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glEnable(GL_LIGHT0); 146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 147326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (rsc->mRootScript.get()) { 148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->runRootScript(); 149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglSwapBuffers(rsc->mDisplay, rsc->mSurface); 152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams usleep(10000); 154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("TP 6"); 157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClearColor(0,0,0,0); 158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClear(GL_COLOR_BUFFER_BIT); 159326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglSwapBuffers(rsc->mDisplay, rsc->mSurface); 160326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglTerminate(rsc->mDisplay); 161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("TP 7"); 163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return NULL; 165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 167326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsContext::Context(Device *dev, Surface *sur) 168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("CC 1"); 170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams dev->addContext(this); 171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDev = dev; 172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRunning = false; 173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mExit = false; 174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 175326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mServerCommands.init(256); 176326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mServerReturns.init(256); 177326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 178326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams // see comment in header 179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams gCon = this; 180326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 181326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("CC 2"); 182326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int status = pthread_create(&mThreadId, NULL, threadProc, this); 183326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (status) { 184326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("Failed to start rs context thread."); 185326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("CC 3"); 188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mWndSurface = sur; 189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams while(!mRunning) { 190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams sleep(1); 191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("CC 4"); 193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 198326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsContext::~Context() 199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mExit = true; 201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void *res; 202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("DES 1"); 204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int status = pthread_join(mThreadId, &res); 205326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("DES 2"); 206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mDev) { 208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDev->removeContext(this); 209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("DES 3"); 211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 213326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::swapBuffers() 214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglSwapBuffers(mDisplay, mSurface); 216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 217326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 218326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsContextSwap(RsContext vrsc) 219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Context *rsc = static_cast<Context *>(vrsc); 221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->swapBuffers(); 222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 223326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 224326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setRootScript(Script *s) 225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRootScript.set(s); 227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 229326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setFragmentStore(ProgramFragmentStore *pfs) 230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mFragmentStore.set(pfs); 232326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams pfs->setupGL(); 233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 235326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setFragment(ProgramFragment *pf) 236326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mFragment.set(pf); 238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams pf->setupGL(); 239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 240326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 241326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setVertex(ProgramVertex *pv) 242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 243326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mVertex.set(pv); 244326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams pv->setupGL(); 245326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 246326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 247326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/////////////////////////////////////////////////////////////////////////////////////////// 248326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// 249326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 250326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 251326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 252326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 253326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 254326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindRootScript(Context *rsc, RsScript vs) 255326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 256326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Script *s = static_cast<Script *>(vs); 257326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->setRootScript(s); 258326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 259326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 260326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindSampler(Context *rsc, uint32_t slot, RsSampler vs) 261326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 262326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Sampler *s = static_cast<Sampler *>(vs); 263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 264326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (slot > RS_MAX_SAMPLER_SLOT) { 265326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("Invalid sampler slot"); 266326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return; 267326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 268326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 269326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams s->bindToContext(&rsc->mStateSampler, slot); 270326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 271326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 272326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindProgramFragmentStore(Context *rsc, RsProgramFragmentStore vpfs) 273326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 274326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ProgramFragmentStore *pfs = static_cast<ProgramFragmentStore *>(vpfs); 275326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->setFragmentStore(pfs); 276326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 277326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 278326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindProgramFragment(Context *rsc, RsProgramFragment vpf) 279326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 280326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ProgramFragment *pf = static_cast<ProgramFragment *>(vpf); 281326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->setFragment(pf); 282326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 283326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 284326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindProgramVertex(Context *rsc, RsProgramVertex vpv) 285326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 286326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ProgramVertex *pv = static_cast<ProgramVertex *>(vpv); 287326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->setVertex(pv); 288326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 289326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 290326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 291326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 292326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 293326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 294326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 295326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 296326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsContext rsContextCreate(RsDevice vdev, void *sur, uint32_t version) 297326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 298326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Device * dev = static_cast<Device *>(vdev); 299326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Context *rsc = new Context(dev, (Surface *)sur); 300326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return rsc; 301326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 302326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 303326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsContextDestroy(RsContext vrsc) 304326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 305326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Context * rsc = static_cast<Context *>(vrsc); 306326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams delete rsc; 307326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 308326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 309