rsContext.cpp revision 1030893d9b99b72468034da13df025bda479bb97
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 mDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglInitialize(mDisplay, &mMajorVersion, &mMinorVersion); 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglChooseConfig(mDisplay, s_configAttribs, &mConfig, 1, &mNumConfigs); 43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mWndSurface) { 45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mSurface = eglCreateWindowSurface(mDisplay, mConfig, 46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams new EGLNativeWindowSurface(mWndSurface), 47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams NULL); 48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } else { 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mSurface = eglCreateWindowSurface(mDisplay, mConfig, 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams android_createDisplaySurface(), 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams NULL); 52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mContext = eglCreateContext(mDisplay, mConfig, NULL, NULL); 55a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams eglMakeCurrent(mDisplay, mSurface, mSurface, mContext); 56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglQuerySurface(mDisplay, mSurface, EGL_WIDTH, &mWidth); 57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglQuerySurface(mDisplay, mSurface, EGL_HEIGHT, &mHeight); 58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 601030893d9b99b72468034da13df025bda479bb97Jason Samsbool Context::runScript(Script *s) 611030893d9b99b72468034da13df025bda479bb97Jason Sams{ 621030893d9b99b72468034da13df025bda479bb97Jason Sams ObjectBaseRef<ProgramFragment> frag(mFragment); 631030893d9b99b72468034da13df025bda479bb97Jason Sams ObjectBaseRef<ProgramVertex> vtx(mVertex); 641030893d9b99b72468034da13df025bda479bb97Jason Sams ObjectBaseRef<ProgramFragmentStore> store(mFragmentStore); 651030893d9b99b72468034da13df025bda479bb97Jason Sams 661030893d9b99b72468034da13df025bda479bb97Jason Sams 671030893d9b99b72468034da13df025bda479bb97Jason Sams 681030893d9b99b72468034da13df025bda479bb97Jason Sams return true; 691030893d9b99b72468034da13df025bda479bb97Jason Sams 701030893d9b99b72468034da13df025bda479bb97Jason Sams} 711030893d9b99b72468034da13df025bda479bb97Jason Sams 721030893d9b99b72468034da13df025bda479bb97Jason Sams 73a44cb29164726cd9d812117819abdd7b60dfdd93Jason Samsbool Context::runRootScript() 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 751030893d9b99b72468034da13df025bda479bb97Jason Sams rsAssert(mRootScript->mEnviroment.mIsRoot); 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 77a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams glColor4f(1,1,1,1); 78a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams glEnable(GL_LIGHT0); 791030893d9b99b72468034da13df025bda479bb97Jason Sams glViewport(0, 0, mWidth, mHeight); 80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 811030893d9b99b72468034da13df025bda479bb97Jason Sams if(mRootScript->mEnviroment.mIsOrtho) { 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_PROJECTION); 83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glLoadIdentity(); 841030893d9b99b72468034da13df025bda479bb97Jason Sams glOrthof(0, mWidth, mHeight, 0, 0, 1); 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_MODELVIEW); 86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } else { 871030893d9b99b72468034da13df025bda479bb97Jason Sams float aspectH = ((float)mWidth) / mHeight; 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_PROJECTION); 89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glLoadIdentity(); 90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glFrustumf(-1, 1, -aspectH, aspectH, 1, 100); 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glRotatef(-90, 0,0,1); 92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glTranslatef(0, 0, -3); 93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_MODELVIEW); 94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_MODELVIEW); 97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glLoadIdentity(); 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glDepthMask(GL_TRUE); 100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 102928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams glClearColor(mRootScript->mEnviroment.mClearColor[0], 103928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams mRootScript->mEnviroment.mClearColor[1], 104928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams mRootScript->mEnviroment.mClearColor[2], 105928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams mRootScript->mEnviroment.mClearColor[3]); 106928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams glClearDepthf(mRootScript->mEnviroment.mClearDepth); 107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClear(GL_COLOR_BUFFER_BIT); 108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClear(GL_DEPTH_BUFFER_BIT); 109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 110a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams return mRootScript->run(this, 0); 111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 113326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setupCheck() 114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mFragmentStore.get()) { 116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mFragmentStore->setupGL(); 117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mFragment.get()) { 119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mFragment->setupGL(); 120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mVertex.get()) { 122326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mVertex->setupGL(); 123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 128326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid * Context::threadProc(void *vrsc) 129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Context *rsc = static_cast<Context *>(vrsc); 131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams gIO = new ThreadIO(); 133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mServerCommands.init(128); 134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mServerReturns.init(128); 135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->initEGL(); 137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mRunning = true; 138a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams bool mDraw = true; 139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams while (!rsc->mExit) { 140a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams mDraw |= gIO->playCoreCommands(rsc); 141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 142a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams if (!mDraw || !rsc->mRootScript.get()) { 143a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams usleep(10000); 144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams continue; 145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 147326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (rsc->mRootScript.get()) { 148a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams mDraw = rsc->runRootScript(); 149a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams eglSwapBuffers(rsc->mDisplay, rsc->mSurface); 150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClearColor(0,0,0,0); 154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClear(GL_COLOR_BUFFER_BIT); 155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglSwapBuffers(rsc->mDisplay, rsc->mSurface); 156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglTerminate(rsc->mDisplay); 157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return NULL; 158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 159326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 160326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsContext::Context(Device *dev, Surface *sur) 161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams dev->addContext(this); 163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDev = dev; 164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRunning = false; 165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mExit = false; 166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 167326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mServerCommands.init(256); 168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mServerReturns.init(256); 169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams // see comment in header 171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams gCon = this; 172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 173a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams int status; 174a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams pthread_attr_t threadAttr; 175a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams 176a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams status = pthread_attr_init(&threadAttr); 177a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams if (status) { 178a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams LOGE("Failed to init thread attribute."); 179a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams return; 180a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams } 181a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams 182a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams sched_param sparam; 183a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams sparam.sched_priority = ANDROID_PRIORITY_DISPLAY; 184a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams pthread_attr_setschedparam(&threadAttr, &sparam); 185a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams 186efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams LOGE("RS Launching thread"); 187a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams status = pthread_create(&mThreadId, &threadAttr, threadProc, this); 188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (status) { 189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("Failed to start rs context thread."); 190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mWndSurface = sur; 193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams while(!mRunning) { 194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams sleep(1); 195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 197a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams pthread_attr_destroy(&threadAttr); 198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 200326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsContext::~Context() 201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mExit = true; 203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void *res; 204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 205326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int status = pthread_join(mThreadId, &res); 206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mDev) { 208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDev->removeContext(this); 209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 212326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::swapBuffers() 213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglSwapBuffers(mDisplay, mSurface); 215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 217326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsContextSwap(RsContext vrsc) 218326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Context *rsc = static_cast<Context *>(vrsc); 220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->swapBuffers(); 221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 223326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setRootScript(Script *s) 224326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRootScript.set(s); 226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 228326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setFragmentStore(ProgramFragmentStore *pfs) 229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mFragmentStore.set(pfs); 231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams pfs->setupGL(); 232326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 234326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setFragment(ProgramFragment *pf) 235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 236326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mFragment.set(pf); 237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams pf->setupGL(); 238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 240326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setVertex(ProgramVertex *pv) 241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mVertex.set(pv); 243326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams pv->setupGL(); 244326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 245326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 246326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/////////////////////////////////////////////////////////////////////////////////////////// 247a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams// 248326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 249326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 250326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 251326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 252326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 253326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindRootScript(Context *rsc, RsScript vs) 254326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 255326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Script *s = static_cast<Script *>(vs); 256326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->setRootScript(s); 257326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 258326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 259326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindSampler(Context *rsc, uint32_t slot, RsSampler vs) 260326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 261326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Sampler *s = static_cast<Sampler *>(vs); 262326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (slot > RS_MAX_SAMPLER_SLOT) { 264326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("Invalid sampler slot"); 265326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return; 266326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 267326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 268326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams s->bindToContext(&rsc->mStateSampler, slot); 269326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 270326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 271326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindProgramFragmentStore(Context *rsc, RsProgramFragmentStore vpfs) 272326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 273326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ProgramFragmentStore *pfs = static_cast<ProgramFragmentStore *>(vpfs); 274326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->setFragmentStore(pfs); 275326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 276326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 277326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindProgramFragment(Context *rsc, RsProgramFragment vpf) 278326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 279326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ProgramFragment *pf = static_cast<ProgramFragment *>(vpf); 280326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->setFragment(pf); 281326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 282326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 283326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindProgramVertex(Context *rsc, RsProgramVertex vpv) 284326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 285326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ProgramVertex *pv = static_cast<ProgramVertex *>(vpv); 286326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->setVertex(pv); 287326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 288326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 289326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 290326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 291326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 292326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 293326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 294326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 295326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsContext rsContextCreate(RsDevice vdev, void *sur, uint32_t version) 296326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 297326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Device * dev = static_cast<Device *>(vdev); 298326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Context *rsc = new Context(dev, (Surface *)sur); 299326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return rsc; 300326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 301326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 302326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsContextDestroy(RsContext vrsc) 303326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 304326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Context * rsc = static_cast<Context *>(vrsc); 305326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams delete rsc; 306326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 307326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 308