blob: 6f2cf3e7f7f609edce89e80f726de249a07228f9 [file] [log] [blame]
/*
* 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);
}
}
}