1a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk/* 2a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project 3a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * 4a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 5a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * you may not use this file except in compliance with the License. 6a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * You may obtain a copy of the License at 7a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * 8a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 9a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * 10a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 11a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 12a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * See the License for the specific language governing permissions and 14a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * limitations under the License. 15a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk */ 16a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 17a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 18a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#include <rs_hal.h> 19a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#include <rsContext.h> 20a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#include <rsMesh.h> 21a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 22a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#include "rsdCore.h" 23a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#include "rsdMesh.h" 24a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#include "rsdMeshObj.h" 25a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#include "rsdShaderCache.h" 26a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 27a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukusing namespace android; 28a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukusing namespace android::renderscript; 29a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 30a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukbool rsdMeshInit(const Context *rsc, const Mesh *m) { 31a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk RsdMeshObj *drv = NULL; 32a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk if(m->mHal.drv) { 33a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk drv = (RsdMeshObj*)m->mHal.drv; 34a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk delete drv; 35a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } 36a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk drv = new RsdMeshObj(rsc, m); 37a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk m->mHal.drv = drv; 38c0a65425f8eb3573b1abd2a48292ca953c0a8590Alex Sakhartchouk return drv->init(rsc); 39a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk} 40a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 41a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukvoid rsdMeshDraw(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len) { 42a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk if(m->mHal.drv) { 43a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk RsdHal *dc = (RsdHal *)rsc->mHal.drv; 44a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk if (!dc->gl.shaderCache->setup(rsc)) { 45a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk return; 46a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } 47a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 48a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk RsdMeshObj *drv = (RsdMeshObj*)m->mHal.drv; 49a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk drv->renderPrimitiveRange(rsc, primIndex, start, len); 50a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } 51a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk} 52a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 53a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukvoid rsdMeshDestroy(const Context *rsc, const Mesh *m) { 54a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk if(m->mHal.drv) { 55a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk RsdMeshObj *drv = (RsdMeshObj*)m->mHal.drv; 56a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk delete drv; 57a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } 58a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk} 59a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 60a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 61