/*
 * Copyright 2013 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 <string.h>

#include "Texture.h"

namespace android {

Texture::Texture() :
    mTextureName(0), mTextureTarget(TEXTURE_2D),
    mWidth(0), mHeight(0), mFiltering(false) {
}

Texture::Texture(Target textureTarget, uint32_t textureName) :
            mTextureName(textureName), mTextureTarget(textureTarget),
            mWidth(0), mHeight(0), mFiltering(false) {
}

void Texture::init(Target textureTarget, uint32_t textureName) {
    mTextureName = textureName;
    mTextureTarget = textureTarget;
}

Texture::~Texture() {
}


void Texture::setMatrix(float const* matrix) {
    mTextureMatrix = mat4(matrix);
}

void Texture::setFiltering(bool enabled) {
    mFiltering = enabled;
}

void Texture::setDimensions(size_t width, size_t height) {
    mWidth = width;
    mHeight = height;
}

uint32_t Texture::getTextureName() const {
    return mTextureName;
}

uint32_t Texture::getTextureTarget() const {
    return mTextureTarget;
}

const mat4& Texture::getMatrix() const {
    return mTextureMatrix;
}

bool Texture::getFiltering() const {
    return mFiltering;
}

size_t Texture::getWidth() const {
    return mWidth;
}

size_t Texture::getHeight() const {
    return mHeight;
}

} /* namespace android */
