rsProgramVertex.cpp revision 326e0ddf89e8df2837752fbfd7a014814b32082c
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 "rsContext.h"
18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsProgramVertex.h"
19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
20326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android;
21326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript;
22326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
24326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsProgramVertex::ProgramVertex(Element *in, Element *out) :
25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Program(in, out)
26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mTextureMatrixEnable = false;
28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mProjectionEnable = false;
29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mTransformEnable = false;
30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
32326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsProgramVertex::~ProgramVertex()
33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
36326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ProgramVertex::setupGL()
37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    const float *f = static_cast<const float *>(mConstants[0]->getPtr());
39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glMatrixMode(GL_TEXTURE);
41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    if (mTextureMatrixEnable) {
42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glLoadMatrixf(&f[RS_PROGRAM_VERTEX_TEXTURE_OFFSET]);
43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    } else {
44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glLoadIdentity();
45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glMatrixMode(GL_PROJECTION);
49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    if (mProjectionEnable) {
50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        //glLoadMatrixf(&f[OFFSET_PROJECTION]);
51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    } else {
52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glMatrixMode(GL_MODELVIEW);
55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    if (mTransformEnable) {
56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glLoadMatrixf(&f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET]);
57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    } else {
58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glLoadIdentity();
59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
63326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ProgramVertex::setConstantType(uint32_t slot, const Type *t)
64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mConstantTypes[slot].set(t);
66326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
68326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ProgramVertex::bindAllocation(uint32_t slot, Allocation *a)
69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mConstants[slot].set(a);
71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
74326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsProgramVertexState::ProgramVertexState()
75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mPV = NULL;
77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
79326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsProgramVertexState::~ProgramVertexState()
80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    delete mPV;
82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
86326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
87326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
89326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ProgramVertexBegin(Context *rsc, RsElement in, RsElement out)
90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    delete rsc->mStateVertex.mPV;
92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateVertex.mPV = new ProgramVertex((Element *)in, (Element *)out);
93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
95326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsProgramVertex rsi_ProgramVertexCreate(Context *rsc)
96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ProgramVertex *pv = rsc->mStateVertex.mPV;
98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    pv->incRef();
99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateVertex.mPV = 0;
100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return pv;
102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
104326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ProgramVertexBindAllocation(Context *rsc, RsProgramVertex vpgm, uint32_t slot, RsAllocation constants)
105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ProgramVertex *pv = static_cast<ProgramVertex *>(vpgm);
107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    pv->bindAllocation(slot, static_cast<Allocation *>(constants));
108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
110326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ProgramVertexSetType(Context *rsc, uint32_t slot, RsType constants)
111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateVertex.mPV->setConstantType(slot, static_cast<const Type *>(constants));
113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
115326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ProgramVertexSetCameraMode(Context *rsc, bool ortho)
116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateVertex.mPV->setProjectionEnabled(!ortho);
118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
120326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ProgramVertexSetTextureMatrixEnable(Context *rsc, bool enable)
121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
122326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateVertex.mPV->setTextureMatrixEnable(enable);
123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
125326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ProgramVertexSetModelMatrixEnable(Context *rsc, bool enable)
126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateVertex.mPV->setTransformEnable(enable);
128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
134