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 19729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murrayusing namespace android; 20729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murrayusing namespace RSC; 21729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 22729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurraySampler::Sampler(sp<RS> rs, void* id): 23729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray BaseObj(id, rs) 24729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray{ 25729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mMin = RS_SAMPLER_INVALID; 26729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mMag = RS_SAMPLER_INVALID; 27729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mWrapS = RS_SAMPLER_INVALID;; 28729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mWrapT = RS_SAMPLER_INVALID;; 29729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray float mAniso = 0.f; 30729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 31729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 32729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayRsSamplerValue Sampler::getMinification() { 33729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return mMin; 34729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 35729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 36729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayRsSamplerValue Sampler::getMagnification() { 37729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return mMag; 38729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 39729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 40729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayRsSamplerValue Sampler::getWrapS() { 41729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return mWrapS; 42729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 43729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 44729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayRsSamplerValue Sampler::getWrapT() { 45729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return mWrapT; 46729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 47729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 48729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murrayfloat Sampler::getAnisotropy() { 49729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return mAniso; 50729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 51729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 52729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murraysp<Sampler> Sampler::create(sp<RS> rs, RsSamplerValue min, RsSamplerValue mag, RsSamplerValue wrapS, RsSamplerValue wrapT, float anisotropy) { 53729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray // we aren't supporting wrapR in C++ API atm, so always pass wrap for that 548a588bd9d34088ed89ef2c192c32ea2301e601bcStephen Hines void* id = RS::dispatch->SamplerCreate(rs->getContext(), min, mag, wrapS, wrapT, RS_SAMPLER_WRAP, anisotropy); 55729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return new Sampler(rs, id); 56729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray} 57729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 58729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray#define CREATE_SAMPLER(N, MIN, MAG, WRAPS, WRAPT) sp<const Sampler> Sampler::N(sp<RS> rs) { \ 59729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray if (rs->mSamplers.N == NULL) { \ 6089daad6bae798779e57f252e9da4fe4e62337124Tim Murray rs->mSamplers.N = (create(rs, MIN, MAG, WRAPS, WRAPT, 0.f)); \ 61729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray } \ 62729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray return rs->mSamplers.N; \ 63729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray } 64729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 65729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(CLAMP_NEAREST, RS_SAMPLER_CLAMP, RS_SAMPLER_CLAMP, RS_SAMPLER_NEAREST, RS_SAMPLER_NEAREST); 66729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(CLAMP_LINEAR, RS_SAMPLER_CLAMP, RS_SAMPLER_CLAMP, RS_SAMPLER_LINEAR, RS_SAMPLER_LINEAR); 67729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(CLAMP_LINEAR_MIP_LINEAR, RS_SAMPLER_CLAMP, RS_SAMPLER_CLAMP, RS_SAMPLER_LINEAR_MIP_LINEAR, RS_SAMPLER_LINEAR_MIP_LINEAR); 68729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(WRAP_NEAREST, RS_SAMPLER_WRAP, RS_SAMPLER_WRAP, RS_SAMPLER_NEAREST, RS_SAMPLER_NEAREST); 69729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(WRAP_LINEAR, RS_SAMPLER_WRAP, RS_SAMPLER_WRAP, RS_SAMPLER_LINEAR, RS_SAMPLER_LINEAR); 70729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(WRAP_LINEAR_MIP_LINEAR, RS_SAMPLER_WRAP, RS_SAMPLER_WRAP, RS_SAMPLER_LINEAR_MIP_LINEAR, RS_SAMPLER_LINEAR_MIP_LINEAR); 71729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(MIRRORED_REPEAT_NEAREST, RS_SAMPLER_MIRRORED_REPEAT, RS_SAMPLER_MIRRORED_REPEAT, RS_SAMPLER_NEAREST, RS_SAMPLER_NEAREST); 72729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim MurrayCREATE_SAMPLER(MIRRORED_REPEAT_LINEAR, RS_SAMPLER_MIRRORED_REPEAT, RS_SAMPLER_MIRRORED_REPEAT, RS_SAMPLER_LINEAR, RS_SAMPLER_LINEAR); 73729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim 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); 74