Sampler.cpp revision 729b6fe58aff47c4f666b22bbb7a6d6114ddefa9
1729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray/* 2729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * Copyright (C) 2008-2012 The Android Open Source Project 3729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * 4729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * Licensed under the Apache License, Version 2.0 (the "License"); 5729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * you may not use this file except in compliance with the License. 6729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * You may obtain a copy of the License at 7729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * 8729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * http://www.apache.org/licenses/LICENSE-2.0 9729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * 10729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * Unless required by applicable law or agreed to in writing, software 11729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * distributed under the License is distributed on an "AS IS" BASIS, 12729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * See the License for the specific language governing permissions and 14729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray * limitations under the License. 15729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray */ 16729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 17729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray#include "RenderScript.h" 18729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray#include <rs.h> 19729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 20729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murrayusing namespace android; 21729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murrayusing namespace RSC; 22729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 23729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurraySampler::Sampler(sp<RS> rs, void* id): 24729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray BaseObj(id, rs) 25729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray{ 26729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mMin = RS_SAMPLER_INVALID; 27729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mMag = RS_SAMPLER_INVALID; 28729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mWrapS = RS_SAMPLER_INVALID;; 29729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mWrapT = RS_SAMPLER_INVALID;; 30729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray float mAniso = 0.f; 31729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 32729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 33729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayRsSamplerValue Sampler::getMinification() { 34729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return mMin; 35729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 36729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 37729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayRsSamplerValue Sampler::getMagnification() { 38729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return mMag; 39729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 40729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 41729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayRsSamplerValue Sampler::getWrapS() { 42729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return mWrapS; 43729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 44729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 45729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayRsSamplerValue Sampler::getWrapT() { 46729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return mWrapT; 47729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 48729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 49729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murrayfloat Sampler::getAnisotropy() { 50729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return mAniso; 51729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 52729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 53729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murraysp<Sampler> Sampler::create(sp<RS> rs, RsSamplerValue min, RsSamplerValue mag, RsSamplerValue wrapS, RsSamplerValue wrapT, float anisotropy) { 54729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray // we aren't supporting wrapR in C++ API atm, so always pass wrap for that 55729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray void* id = RS::dispatch->SamplerCreate(rs.get(), min, mag, wrapS, wrapT, RS_SAMPLER_WRAP, anisotropy); 56729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return new Sampler(rs, id); 57729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 58729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 59729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray#define CREATE_SAMPLER(N, MIN, MAG, WRAPS, WRAPT) sp<const Sampler> Sampler::N(sp<RS> rs) { \ 60729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray if (rs->mSamplers.N == NULL) { \ 61729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray rs->mSamplers.N = (create(rs, MIN, MAG, WRAPS, WRAPT, 0.f)).get(); \ 62729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray } \ 63729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return rs->mSamplers.N; \ 64729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray } 65729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 66729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(CLAMP_NEAREST, RS_SAMPLER_CLAMP, RS_SAMPLER_CLAMP, RS_SAMPLER_NEAREST, RS_SAMPLER_NEAREST); 67729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(CLAMP_LINEAR, RS_SAMPLER_CLAMP, RS_SAMPLER_CLAMP, RS_SAMPLER_LINEAR, RS_SAMPLER_LINEAR); 68729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(CLAMP_LINEAR_MIP_LINEAR, RS_SAMPLER_CLAMP, RS_SAMPLER_CLAMP, RS_SAMPLER_LINEAR_MIP_LINEAR, RS_SAMPLER_LINEAR_MIP_LINEAR); 69729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(WRAP_NEAREST, RS_SAMPLER_WRAP, RS_SAMPLER_WRAP, RS_SAMPLER_NEAREST, RS_SAMPLER_NEAREST); 70729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(WRAP_LINEAR, RS_SAMPLER_WRAP, RS_SAMPLER_WRAP, RS_SAMPLER_LINEAR, RS_SAMPLER_LINEAR); 71729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(WRAP_LINEAR_MIP_LINEAR, RS_SAMPLER_WRAP, RS_SAMPLER_WRAP, RS_SAMPLER_LINEAR_MIP_LINEAR, RS_SAMPLER_LINEAR_MIP_LINEAR); 72729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(MIRRORED_REPEAT_NEAREST, RS_SAMPLER_MIRRORED_REPEAT, RS_SAMPLER_MIRRORED_REPEAT, RS_SAMPLER_NEAREST, RS_SAMPLER_NEAREST); 73729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(MIRRORED_REPEAT_LINEAR, RS_SAMPLER_MIRRORED_REPEAT, RS_SAMPLER_MIRRORED_REPEAT, RS_SAMPLER_LINEAR, RS_SAMPLER_LINEAR); 74729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(MIRRORED_REPEAT_LINEAR_MIP_LINEAR, RS_SAMPLER_MIRRORED_REPEAT, RS_SAMPLER_MIRRORED_REPEAT, RS_SAMPLER_LINEAR_MIP_LINEAR, RS_SAMPLER_LINEAR_MIP_LINEAR); 75