131 lines
2.5 KiB
C++
131 lines
2.5 KiB
C++
|
/*
|
||
|
* Copyright (C) 2009 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.
|
||
|
*/
|
||
|
|
||
|
#include "rsContext.h"
|
||
|
|
||
|
#include <GLES/gl.h>
|
||
|
|
||
|
using namespace android;
|
||
|
using namespace android::renderscript;
|
||
|
|
||
|
|
||
|
Light::Light(Context *rsc, bool isLocal, bool isMono) : ObjectBase(rsc)
|
||
|
{
|
||
|
mAllocFile = __FILE__;
|
||
|
mAllocLine = __LINE__;
|
||
|
mIsLocal = isLocal;
|
||
|
mIsMono = isMono;
|
||
|
|
||
|
mPosition[0] = 0;
|
||
|
mPosition[1] = 0;
|
||
|
mPosition[2] = 1;
|
||
|
mPosition[3] = 0;
|
||
|
|
||
|
mColor[0] = 1.f;
|
||
|
mColor[1] = 1.f;
|
||
|
mColor[2] = 1.f;
|
||
|
mColor[3] = 1.f;
|
||
|
}
|
||
|
|
||
|
Light::~Light()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void Light::setPosition(float x, float y, float z)
|
||
|
{
|
||
|
mPosition[0] = x;
|
||
|
mPosition[1] = y;
|
||
|
mPosition[2] = z;
|
||
|
}
|
||
|
|
||
|
void Light::setColor(float r, float g, float b)
|
||
|
{
|
||
|
mColor[0] = r;
|
||
|
mColor[1] = g;
|
||
|
mColor[2] = b;
|
||
|
}
|
||
|
|
||
|
void Light::setupGL(uint32_t num) const
|
||
|
{
|
||
|
glLightfv(GL_LIGHT0 + num, GL_DIFFUSE, mColor);
|
||
|
glLightfv(GL_LIGHT0 + num, GL_SPECULAR, mColor);
|
||
|
glLightfv(GL_LIGHT0 + num, GL_POSITION, mPosition);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////
|
||
|
|
||
|
LightState::LightState()
|
||
|
{
|
||
|
clear();
|
||
|
}
|
||
|
|
||
|
LightState::~LightState()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void LightState::clear()
|
||
|
{
|
||
|
mIsLocal = false;
|
||
|
mIsMono = false;
|
||
|
}
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////
|
||
|
//
|
||
|
|
||
|
namespace android {
|
||
|
namespace renderscript {
|
||
|
|
||
|
void rsi_LightBegin(Context *rsc)
|
||
|
{
|
||
|
rsc->mStateLight.clear();
|
||
|
}
|
||
|
|
||
|
void rsi_LightSetLocal(Context *rsc, bool isLocal)
|
||
|
{
|
||
|
rsc->mStateLight.mIsLocal = isLocal;
|
||
|
}
|
||
|
|
||
|
void rsi_LightSetMonochromatic(Context *rsc, bool isMono)
|
||
|
{
|
||
|
rsc->mStateLight.mIsMono = isMono;
|
||
|
}
|
||
|
|
||
|
RsLight rsi_LightCreate(Context *rsc)
|
||
|
{
|
||
|
Light *l = new Light(rsc, rsc->mStateLight.mIsLocal,
|
||
|
rsc->mStateLight.mIsMono);
|
||
|
l->incUserRef();
|
||
|
return l;
|
||
|
}
|
||
|
|
||
|
void rsi_LightSetColor(Context *rsc, RsLight vl, float r, float g, float b)
|
||
|
{
|
||
|
Light *l = static_cast<Light *>(vl);
|
||
|
l->setColor(r, g, b);
|
||
|
}
|
||
|
|
||
|
void rsi_LightSetPosition(Context *rsc, RsLight vl, float x, float y, float z)
|
||
|
{
|
||
|
Light *l = static_cast<Light *>(vl);
|
||
|
l->setPosition(x, y, z);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|