rsContext.cpp revision a44cb29164726cd9d812117819abdd7b60dfdd93
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); 60a44cb29164726cd9d812117819abdd7b60dfdd93Jason 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 67a44cb29164726cd9d812117819abdd7b60dfdd93Jason Samsbool Context::runRootScript() 68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsAssert(mRootScript->mIsRoot); 70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 71a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams glColor4f(1,1,1,1); 72a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams glEnable(GL_LIGHT0); 73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glViewport(0, 0, 320, 480); 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams float aspectH = 480.f / 320.f; 75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if(mRootScript->mIsOrtho) { 77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_PROJECTION); 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glLoadIdentity(); 796678e9b2568ad041429a2477177133fe4932159fJason Sams glOrthof(0, 320, 480, 0, 0, 1); 80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_MODELVIEW); 81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } else { 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_PROJECTION); 83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glLoadIdentity(); 84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glFrustumf(-1, 1, -aspectH, aspectH, 1, 100); 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glRotatef(-90, 0,0,1); 86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glTranslatef(0, 0, -3); 87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_MODELVIEW); 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMatrixMode(GL_MODELVIEW); 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glLoadIdentity(); 92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glDepthMask(GL_TRUE); 94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 96a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams glClearColor(mRootScript->mClearColor[0], 97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRootScript->mClearColor[1], 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRootScript->mClearColor[2], 99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRootScript->mClearColor[3]); 100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClearDepthf(mRootScript->mClearDepth); 101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClear(GL_COLOR_BUFFER_BIT); 102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glClear(GL_DEPTH_BUFFER_BIT); 103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 104a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams return mRootScript->run(this, 0); 105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 107326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setupCheck() 108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mFragmentStore.get()) { 110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mFragmentStore->setupGL(); 111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mFragment.get()) { 113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mFragment->setupGL(); 114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mVertex.get()) { 116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mVertex->setupGL(); 117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 122326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid * Context::threadProc(void *vrsc) 123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Context *rsc = static_cast<Context *>(vrsc); 125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("TP 1"); 127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams gIO = new ThreadIO(); 128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mServerCommands.init(128); 130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mServerReturns.init(128); 131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->initEGL(); 133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("TP 2"); 135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->mRunning = true; 137a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams bool mDraw = true; 138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams while (!rsc->mExit) { 139a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams mDraw |= gIO->playCoreCommands(rsc); 140326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 141a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams if (!mDraw || !rsc->mRootScript.get()) { 142a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams usleep(10000); 143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams continue; 144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (rsc->mRootScript.get()) { 147a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams mDraw = rsc->runRootScript(); 148a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams eglSwapBuffers(rsc->mDisplay, rsc->mSurface); 149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("TP 6"); 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 LOGE("CC 1"); 163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams dev->addContext(this); 164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDev = dev; 165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRunning = false; 166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mExit = false; 167326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mServerCommands.init(256); 169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mServerReturns.init(256); 170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams // see comment in header 172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams gCon = this; 173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("CC 2"); 175a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams int status; 176a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams pthread_attr_t threadAttr; 177a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams 178a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams status = pthread_attr_init(&threadAttr); 179a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams if (status) { 180a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams LOGE("Failed to init thread attribute."); 181a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams return; 182a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams } 183a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams 184a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams sched_param sparam; 185a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams sparam.sched_priority = ANDROID_PRIORITY_DISPLAY; 186a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams pthread_attr_setschedparam(&threadAttr, &sparam); 187a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams 188a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams status = pthread_create(&mThreadId, &threadAttr, threadProc, this); 189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (status) { 190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("Failed to start rs context thread."); 191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("CC 3"); 194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mWndSurface = sur; 195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams while(!mRunning) { 196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams sleep(1); 197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("CC 4"); 199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 200a658e905f14fe500bfee3812b213a73cb37ef6f2Jason Sams pthread_attr_destroy(&threadAttr); 201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 203326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsContext::~Context() 204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 205326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mExit = true; 206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void *res; 207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("DES 1"); 209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int status = pthread_join(mThreadId, &res); 210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("DES 2"); 211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mDev) { 213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mDev->removeContext(this); 214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("DES 3"); 216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 217326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 218326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::swapBuffers() 219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams eglSwapBuffers(mDisplay, mSurface); 221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 223326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsContextSwap(RsContext vrsc) 224326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Context *rsc = static_cast<Context *>(vrsc); 226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->swapBuffers(); 227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 229326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setRootScript(Script *s) 230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRootScript.set(s); 232326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 234326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setFragmentStore(ProgramFragmentStore *pfs) 235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 236326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mFragmentStore.set(pfs); 237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams pfs->setupGL(); 238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 240326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setFragment(ProgramFragment *pf) 241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mFragment.set(pf); 243326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams pf->setupGL(); 244326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 245326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 246326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Context::setVertex(ProgramVertex *pv) 247326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 248326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mVertex.set(pv); 249326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams pv->setupGL(); 250326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 251326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 252326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/////////////////////////////////////////////////////////////////////////////////////////// 253a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams// 254326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 255326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 256326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 257326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 258326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 259326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindRootScript(Context *rsc, RsScript vs) 260326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 261326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Script *s = static_cast<Script *>(vs); 262326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->setRootScript(s); 263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 264326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 265326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindSampler(Context *rsc, uint32_t slot, RsSampler vs) 266326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 267326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Sampler *s = static_cast<Sampler *>(vs); 268326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 269326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (slot > RS_MAX_SAMPLER_SLOT) { 270326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams LOGE("Invalid sampler slot"); 271326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return; 272326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 273326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 274326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams s->bindToContext(&rsc->mStateSampler, slot); 275326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 276326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 277326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindProgramFragmentStore(Context *rsc, RsProgramFragmentStore vpfs) 278326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 279326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ProgramFragmentStore *pfs = static_cast<ProgramFragmentStore *>(vpfs); 280326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->setFragmentStore(pfs); 281326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 282326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 283326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindProgramFragment(Context *rsc, RsProgramFragment vpf) 284326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 285326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ProgramFragment *pf = static_cast<ProgramFragment *>(vpf); 286326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->setFragment(pf); 287326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 288326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 289326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ContextBindProgramVertex(Context *rsc, RsProgramVertex vpv) 290326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 291326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ProgramVertex *pv = static_cast<ProgramVertex *>(vpv); 292326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsc->setVertex(pv); 293326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 294326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 295326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 296326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 297326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 298326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 299326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 300326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 301326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsContext rsContextCreate(RsDevice vdev, void *sur, uint32_t version) 302326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 303326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Device * dev = static_cast<Device *>(vdev); 304326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Context *rsc = new Context(dev, (Surface *)sur); 305326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return rsc; 306326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 307326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 308326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsContextDestroy(RsContext vrsc) 309326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 310326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Context * rsc = static_cast<Context *>(vrsc); 311326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams delete rsc; 312326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 313326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 314