111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright 2013 The Android Open Source Project 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Licensed under the Apache License, Version 2.0 (the "License"); 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * you may not use this file except in compliance with the License. 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * You may obtain a copy of the License at 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * http://www.apache.org/licenses/LICENSE-2.0 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Unless required by applicable law or agreed to in writing, software 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * distributed under the License is distributed on an "AS IS" BASIS, 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * See the License for the specific language governing permissions and 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * limitations under the License. 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef SHADER_H_ 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHADER_H_ 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <jni.h> 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <vector> 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <map> 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <string> 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <EGL/egl.h> 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <GLES/gl.h> 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <android/log.h> 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "JNIHelper.h" 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertnamespace ndk_helper 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertnamespace shader 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************** 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Shader compiler helper 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * namespace: ndkHelper::shader 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************** 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * CompileShader() with vector 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * arguments: 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * out: shader, shader variable 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * in: type, shader type (i.e. GL_VERTEX_SHADER/GL_FRAGMENT_SHADER) 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * in: data, source vector 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * return: true if a shader compilation succeeded, false if it failed 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool CompileShader( GLuint *shader, const GLenum type, std::vector<uint8_t>& data ); 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************** 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * CompileShader() with buffer 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * arguments: 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * out: shader, shader variable 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * in: type, shader type (i.e. GL_VERTEX_SHADER/GL_FRAGMENT_SHADER) 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * in: source, source buffer 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * in: iSize, buffer size 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * return: true if a shader compilation succeeded, false if it failed 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool CompileShader( GLuint *shader, 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const GLenum type, 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const GLchar *source, 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const int32_t iSize ); 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************** 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * CompileShader() with filename 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * arguments: 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * out: shader, shader variable 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * in: type, shader type (i.e. GL_VERTEX_SHADER/GL_FRAGMENT_SHADER) 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * in: strFilename, filename 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * return: true if a shader compilation succeeded, false if it failed 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool CompileShader( GLuint *shader, const GLenum type, const char *strFileName ); 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************** 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * CompileShader() with std::map helps patching on a shader on the fly. 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * arguments: 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * out: shader, shader variable 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * in: type, shader type (i.e. GL_VERTEX_SHADER/GL_FRAGMENT_SHADER) 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * in: mapParameters 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * For a example, 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * map : %KEY% -> %VALUE% replaces all %KEY% entries in the given shader code to %VALUE" 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * return: true if a shader compilation succeeded, false if it failed 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool CompileShader( GLuint *shader, 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const GLenum type, 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char *str_file_name, 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const std::map<std::string, std::string>& map_parameters ); 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************** 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * LinkProgram() 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * arguments: 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * in: program, program 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * return: true if a shader linkage succeeded, false if it failed 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool LinkProgram( const GLuint prog ); 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************** 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * validateProgram() 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * arguments: 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * in: program, program 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * return: true if a shader validation succeeded, false if it failed 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool ValidateProgram( const GLuint prog ); 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} //namespace shader 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} //namespace ndkHelper 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* SHADER_H_ */ 125