/*
* Copyright (C) 2012 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 ANDROID_RENDERSCRIPT_H
#define ANDROID_RENDERSCRIPT_H
#include <pthread.h>
#include <utils/String8.h>
#include <utils/Vector.h>
#include "rsDefines.h"
namespace android {
namespace renderscriptCpp {
class Element;
class Type;
class Allocation;
class RenderScript {
friend class BaseObj;
friend class Allocation;
friend class Element;
friend class Type;
friend class Script;
friend class ScriptC;
public:
RenderScript();
virtual ~RenderScript();
typedef void (*ErrorHandlerFunc_t)(uint32_t errorNum, const char *errorText);
typedef void (*MessageHandlerFunc_t)(uint32_t msgNum, const void *msgData, size_t msgLen);
void setErrorHandler(ErrorHandlerFunc_t func);
ErrorHandlerFunc_t getErrorHandler() {return mErrorFunc;}
void setMessageHandler(MessageHandlerFunc_t func);
MessageHandlerFunc_t getMessageHandler() {return mMessageFunc;}
bool init(int targetApi);
void contextDump();
void finish();
private:
static bool gInitialized;
static pthread_mutex_t gInitMutex;
pthread_t mMessageThreadId;
pid_t mNativeMessageThreadId;
bool mMessageRun;
RsDevice mDev;
RsContext mContext;
ErrorHandlerFunc_t mErrorFunc;
MessageHandlerFunc_t mMessageFunc;
struct {
Element *U8;
Element *I8;
Element *U16;
Element *I16;
Element *U32;
Element *I32;
Element *U64;
Element *I64;
Element *F32;
Element *F64;
Element *BOOLEAN;
Element *ELEMENT;
Element *TYPE;
Element *ALLOCATION;
Element *SAMPLER;
Element *SCRIPT;
Element *MESH;
Element *PROGRAM_FRAGMENT;
Element *PROGRAM_VERTEX;
Element *PROGRAM_RASTER;
Element *PROGRAM_STORE;
Element *A_8;
Element *RGB_565;
Element *RGB_888;
Element *RGBA_5551;
Element *RGBA_4444;
Element *RGBA_8888;
Element *FLOAT_2;
Element *FLOAT_3;
Element *FLOAT_4;
Element *DOUBLE_2;
Element *DOUBLE_3;
Element *DOUBLE_4;
Element *UCHAR_2;
Element *UCHAR_3;
Element *UCHAR_4;
Element *CHAR_2;
Element *CHAR_3;
Element *CHAR_4;
Element *USHORT_2;
Element *USHORT_3;
Element *USHORT_4;
Element *SHORT_2;
Element *SHORT_3;
Element *SHORT_4;
Element *UINT_2;
Element *UINT_3;
Element *UINT_4;
Element *INT_2;
Element *INT_3;
Element *INT_4;
Element *ULONG_2;
Element *ULONG_3;
Element *ULONG_4;
Element *LONG_2;
Element *LONG_3;
Element *LONG_4;
Element *MATRIX_4X4;
Element *MATRIX_3X3;
Element *MATRIX_2X2;
} mElements;
void throwError(const char *err) const;
static void * threadProc(void *);
};
}
}
#endif