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) {
3144bef6fba6244292b751387f3d6c31cca96c28adChris Wailes    RsdMeshObj *drv = nullptr;
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