Java Code Examples for android.opengl.GLUtils#texImage2D()

The following examples show how to use android.opengl.GLUtils#texImage2D() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: OverlayEffect.java    From media-for-mobile with Apache License 2.0 6 votes vote down vote up
@Override
protected void addEffectSpecific() {
    if (bitmap.getWidth()!= inputResolution.width()) {
        bitmap = Bitmap.createBitmap(inputResolution.width(), inputResolution.height(), Bitmap.Config.ARGB_8888);
    } else if (bitmap.getHeight() != inputResolution.height()) {
        bitmap = Bitmap.createBitmap(inputResolution.width(), inputResolution.height(), Bitmap.Config.ARGB_8888);
    }

    bitmap.eraseColor(Color.argb(0, 0, 0, 0));

    Canvas bitmapCanvas = new Canvas(bitmap);

    drawCanvas(bitmapCanvas);

    GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
    checkGlError("glBindTexture");


    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, bitmap, 0);
    checkGlError("texImage2d");
    GLES20.glUniform1i(oTextureHandle, 1);
    checkGlError("oTextureHandle - glUniform1i");
}
 
Example 2
Source File: ImageFilterView.java    From PhotoEditor with MIT License 6 votes vote down vote up
private void loadTextures() {
    // Generate textures
    GLES20.glGenTextures(2, mTextures, 0);

    // Load input bitmap
    if (mSourceBitmap != null) {
        mImageWidth = mSourceBitmap.getWidth();
        mImageHeight = mSourceBitmap.getHeight();
        mTexRenderer.updateTextureSize(mImageWidth, mImageHeight);

        // Upload to texture
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures[0]);
        GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, mSourceBitmap, 0);

        // Set texture parameters
        GLToolbox.initTexParams();
    }
}
 
Example 3
Source File: GLTexture.java    From libcommon with Apache License 2.0 6 votes vote down vote up
/**
	 * 指定したビットマップをテクスチャに読み込む
 	 * @param bitmap
	 */
	@Override
	public void loadBitmap(@NonNull final Bitmap bitmap) {
		mImageWidth = bitmap.getWidth();	// 読み込んだイメージのサイズを取得
		mImageHeight = bitmap.getHeight();
		Bitmap texture = Bitmap.createBitmap(mTexWidth, mTexHeight, Bitmap.Config.ARGB_8888);
		final Canvas canvas = new Canvas(texture);
		canvas.drawBitmap(bitmap, 0, 0, null);
		bitmap.recycle();
		// テクスチャ座標変換行列を設定(読み込んだイメージサイズがテクスチャサイズにフィットするようにスケール変換)
		Matrix.setIdentityM(mTexMatrix, 0);
		mTexMatrix[0] = mImageWidth / (float)mTexWidth;
		mTexMatrix[5] = mImageHeight / (float)mTexHeight;
//		if (DEBUG) Log.v(TAG, String.format("image(%d,%d),scale(%f,%f)",
// 			mImageWidth, mImageHeight, mMvpMatrix[0], mMvpMatrix[5]));
		makeCurrent();
		GLUtils.texImage2D(mTextureTarget, 0, texture, 0);
		swap();
		texture.recycle();
	}
 
Example 4
Source File: StaticTriangleRenderer.java    From codeexamples-android with Eclipse Public License 1.0 6 votes vote down vote up
public void load(GL10 gl) {
    InputStream is = mContext.getResources().openRawResource(
            R.raw.robot);
    Bitmap bitmap;
    try {
        bitmap = BitmapFactory.decodeStream(is);
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            // Ignore.
        }
    }

    GLUtils.texImage2D(GL_TEXTURE_2D, 0, bitmap, 0);
    bitmap.recycle();
}
 
Example 5
Source File: JpegSubstituteEffect.java    From media-for-mobile with Apache License 2.0 6 votes vote down vote up
public void start() {
    createProgram(getVertexShader(), getFragmentShader());
    eglProgram.programHandle = shaderProgram.getProgramHandle();

    textureCoordinateHandle = shaderProgram.getAttributeLocation("a_texcoord");
    posCoordinateHandle = shaderProgram.getAttributeLocation("a_position");

    textureVertices = ByteBuffer.allocateDirect(TEX_VERTICES.length * FLOAT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asFloatBuffer();
    textureVertices.put(TEX_VERTICES).position(0);
    posVertices = ByteBuffer.allocateDirect(POS_VERTICES.length * FLOAT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asFloatBuffer();
    posVertices.put(POS_VERTICES).position(0);

    GLES20.glGenTextures(1, textures, 0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
    //load bitmap
    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, resizedBitmap, 0);

    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
}
 
Example 6
Source File: MainActivity.java    From Rocko-Android-Demos with Apache License 2.0 6 votes vote down vote up
private void loadTextures() {
    // Generate textures
    GLES20.glGenTextures(2, mTextures, 0);

    // Load input bitmap
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
            R.drawable.als);
    mImageWidth = bitmap.getWidth();
    mImageHeight = bitmap.getHeight();
    mTexRenderer.updateTextureSize(mImageWidth, mImageHeight);

    // Upload to texture
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures[0]);
    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);

    // Set texture parameters
    GLToolbox.initTexParams();
}
 
Example 7
Source File: IntroActivity.java    From TelePlus-Android with GNU General Public License v2.0 5 votes vote down vote up
private void loadTexture(int resId, int index)
{
    Drawable drawable = getResources().getDrawable(resId);
    if (drawable instanceof BitmapDrawable)
    {
        Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
        GLES20.glBindTexture(GL10.GL_TEXTURE_2D, textures[index]);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
    }
}
 
Example 8
Source File: Utils.java    From LearnOpenGL with MIT License 5 votes vote down vote up
public static int loadTexture(Context context, @DrawableRes int resId) {
    int[] textureObjectIds = new int[1];
    GLES20.glGenTextures(1, textureObjectIds, 0);
    if (textureObjectIds[0] == 0) {
        Log.e(TAG, "Could not generate a new OpenGL texture object.");
        return 0;
    }

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inScaled = false;
    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resId, options);
    if (bitmap == null) {
        Log.e(TAG, "Resource ID " + resId + " could not be decoded.");
        GLES20.glDeleteTextures(1, textureObjectIds, 0);
        return 0;
    }

    // bind
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureObjectIds[0]);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
            GLES20.GL_LINEAR_MIPMAP_LINEAR);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER,
            GLES20.GL_LINEAR);
    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
    bitmap.recycle();

    GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);
    // unbind
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);

    return textureObjectIds[0];
}
 
Example 9
Source File: OpenGlUtils.java    From TikTok with Apache License 2.0 5 votes vote down vote up
public static int loadTexture(final Context context, final String name){
	final int[] textureHandle = new int[1];
	
	GLES20.glGenTextures(1, textureHandle, 0);
	
	if (textureHandle[0] != 0){

		// Read in the resource
		final Bitmap bitmap = getImageFromAssetsFile(context,name);
					
		// Bind to the texture in OpenGL
		GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]);
		
		// Set filtering
		GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
		GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
		GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
		GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
		// Load the bitmap into the bound texture.
		GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
		
		// Recycle the bitmap, since its data has been loaded into OpenGL.
		bitmap.recycle();						
	}
	
	if (textureHandle[0] == 0){
		throw new RuntimeException("Error loading texture.");
	}
	
	return textureHandle[0];
}
 
Example 10
Source File: OpenGlUtil.java    From SimpleVideoEditor with Apache License 2.0 5 votes vote down vote up
private static int createAndBindTexture(Bitmap texture) {
    if (texture == null) {
        return 0;
    }

    int[] textureObjectIds = new int[1];
    glGenTextures(1, textureObjectIds, 0);

    if (textureObjectIds[0] == 0) {
        return 0;
    }

    glBindTexture(GL_TEXTURE_2D, textureObjectIds[0]);

    // 纹理过滤
    // 纹理缩小的时候使用三线性过滤
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    // 纹理放大的时候使用双线性过滤
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    // 设置环绕方向S,截取纹理坐标到[1/2n,1-1/2n]。将导致永远不会与border融合
    glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
    // 设置环绕方向T,截取纹理坐标到[1/2n,1-1/2n]。将导致永远不会与border融合
    glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);

    // 加载位图到opengl中
    GLUtils.texImage2D(GL_TEXTURE_2D, 0, texture, 0);
    texture.recycle();

    // 生成mip贴图
    glGenerateMipmap(GL_TEXTURE_2D);

    // 既然我们已经完成了纹理的加载,现在需要和纹理解除绑定
    glBindTexture(GL_TEXTURE_2D, 0);

    return textureObjectIds[0];
}
 
Example 11
Source File: SphericalViewRenderer.java    From DeviceConnect-Android with MIT License 5 votes vote down vote up
/**
 * Texture setting method
 *
 * @param texture Setting texture
 */
public void loadTexture(final Bitmap texture) {
    GLES20.glGenTextures(1, mTextures, 0);

    GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures[0]);

    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);

    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, texture, 0);
}
 
Example 12
Source File: Shape.java    From OpenGLESRecorder with Apache License 2.0 5 votes vote down vote up
public void initTexture(int res) {
	int [] textures = new int[1];
	GLES20.glGenTextures(1, textures, 0);
	mLoadedTextureId = textures[0];
	GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mLoadedTextureId);
	GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,GLES20.GL_NEAREST);
	GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MAG_FILTER,GLES20.GL_LINEAR);
	GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_MIRRORED_REPEAT);
	GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_MIRRORED_REPEAT);
       Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), res);
       GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
       bitmap.recycle();
       GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);
}
 
Example 13
Source File: GLHelper.java    From libcommon with Apache License 2.0 5 votes vote down vote up
public static int createTextureWithTextContent (final String text, final int texUnit) {
	if (DEBUG) Log.v(TAG, "createTextureWithTextContent:");
	// Create an empty, mutable bitmap
	final Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_8888);
	// get a canvas to paint over the bitmap
	final Canvas canvas = new Canvas(bitmap);
	canvas.drawARGB(0,0,255,0);

	// Draw the text
	final Paint textPaint = new Paint();
	textPaint.setTextSize(32);
	textPaint.setAntiAlias(true);
	textPaint.setARGB(0xff, 0xff, 0xff, 0xff);
	// draw the text centered
	canvas.drawText(text, 16, 112, textPaint);

	final int texture = initTex(GLES30.GL_TEXTURE_2D,
		texUnit, GLES30.GL_NEAREST, GLES30.GL_LINEAR, GLES30.GL_REPEAT);

	// Alpha blending
	// GLES30.glEnable(GLES30.GL_BLEND);
	// GLES30.glBlendFunc(GLES30.GL_SRC_ALPHA, GLES30.GL_ONE_MINUS_SRC_ALPHA);

	// Use the Android GLUtils to specify a two-dimensional texture image from our bitmap
	GLUtils.texImage2D(GLES30.GL_TEXTURE_2D, 0, bitmap, 0);
	// Clean up
	bitmap.recycle();

	return texture;
}
 
Example 14
Source File: IntroActivity.java    From TelePlus-Android with GNU General Public License v2.0 5 votes vote down vote up
private void loadTexture(int resId, int index)
{
    Drawable drawable = getResources().getDrawable(resId);
    if (drawable instanceof BitmapDrawable)
    {
        Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
        GLES20.glBindTexture(GL10.GL_TEXTURE_2D, textures[index]);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
    }
}
 
Example 15
Source File: GLImage.java    From AndroidPlayground with MIT License 4 votes vote down vote up
public GLImage(Resources resources) {
    uvBuffer = ByteBuffer.allocateDirect(uvs.length * 4)
            .order(ByteOrder.nativeOrder())
            .asFloatBuffer()
            .put(uvs);
    uvBuffer.position(0);
    vertexBuffer = ByteBuffer.allocateDirect(vertices.length * 4)
            .order(ByteOrder.nativeOrder())
            .asFloatBuffer()
            .put(vertices);
    vertexBuffer.position(0);
    drawListBuffer = ByteBuffer.allocateDirect(indices.length * 2)
            .order(ByteOrder.nativeOrder())
            .asShortBuffer()
            .put(indices);
    drawListBuffer.position(0);

    int[] textureNames = new int[1];
    GLES20.glGenTextures(1, textureNames, 0);
    GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureNames[0]);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
            GLES20.GL_LINEAR);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER,
            GLES20.GL_LINEAR);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
            GLES20.GL_CLAMP_TO_EDGE);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
            GLES20.GL_CLAMP_TO_EDGE);

    Bitmap bitmap = BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher);
    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
    bitmap.recycle();

    mProgram = GLES20.glCreateProgram();
    int vertexShader = MyGLRenderer.loadShader(GLES20.GL_VERTEX_SHADER, VERTEX_SHADER);
    int fragmentShader = MyGLRenderer.loadShader(GLES20.GL_FRAGMENT_SHADER, FRAGMENT_SHADER);
    GLES20.glAttachShader(mProgram, vertexShader);
    GLES20.glAttachShader(mProgram, fragmentShader);
    GLES20.glLinkProgram(mProgram);
}
 
Example 16
Source File: FilterShaders.java    From Telegram-FOSS with GNU General Public License v2.0 4 votes vote down vote up
private void loadTexture(Bitmap bitmap, int orientation, int w, int h) {
    renderBufferWidth = w;
    renderBufferHeight = h;

    if (renderFrameBuffer == null) {
        renderFrameBuffer = new int[3];
        GLES20.glGenFramebuffers(3, renderFrameBuffer, 0);
        GLES20.glGenTextures(3, renderTexture, 0);
    }

    if (bitmap != null && !bitmap.isRecycled()) {
        float maxSize = AndroidUtilities.getPhotoSize();
        if (renderBufferWidth > maxSize || renderBufferHeight > maxSize || orientation % 360 != 0) {
            float scale = 1;
            if (renderBufferWidth > maxSize || renderBufferHeight > maxSize) {
                float scaleX = maxSize / bitmap.getWidth();
                float scaleY = maxSize / bitmap.getHeight();
                if (scaleX < scaleY) {
                    renderBufferWidth = (int) maxSize;
                    renderBufferHeight = (int) (bitmap.getHeight() * scaleX);
                    scale = scaleX;
                } else {
                    renderBufferHeight = (int) maxSize;
                    renderBufferWidth = (int) (bitmap.getWidth() * scaleY);
                    scale = scaleY;
                }
            }

            if (orientation % 360 == 90 || orientation % 360 == 270) {
                int temp = renderBufferWidth;
                renderBufferWidth = renderBufferHeight;
                renderBufferHeight = temp;
            }

            bitmap = createBitmap(bitmap, orientation, renderBufferWidth, renderBufferHeight, scale);
        }

        GLES20.glBindTexture(GL10.GL_TEXTURE_2D, renderTexture[1]);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
    } else {
        GLES20.glBindTexture(GL10.GL_TEXTURE_2D, renderTexture[1]);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
        GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, renderBufferWidth, renderBufferHeight, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null);
    }

    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, renderTexture[0]);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
    GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, renderBufferWidth, renderBufferHeight, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null);

    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, renderTexture[2]);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
    GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, renderBufferWidth, renderBufferHeight, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null);
}
 
Example 17
Source File: FilterShaders.java    From Telegram with GNU General Public License v2.0 4 votes vote down vote up
private void loadTexture(Bitmap bitmap, int orientation, int w, int h) {
    renderBufferWidth = w;
    renderBufferHeight = h;

    if (renderFrameBuffer == null) {
        renderFrameBuffer = new int[3];
        GLES20.glGenFramebuffers(3, renderFrameBuffer, 0);
        GLES20.glGenTextures(3, renderTexture, 0);
    }

    if (bitmap != null && !bitmap.isRecycled()) {
        float maxSize = AndroidUtilities.getPhotoSize();
        if (renderBufferWidth > maxSize || renderBufferHeight > maxSize || orientation % 360 != 0) {
            float scale = 1;
            if (renderBufferWidth > maxSize || renderBufferHeight > maxSize) {
                float scaleX = maxSize / bitmap.getWidth();
                float scaleY = maxSize / bitmap.getHeight();
                if (scaleX < scaleY) {
                    renderBufferWidth = (int) maxSize;
                    renderBufferHeight = (int) (bitmap.getHeight() * scaleX);
                    scale = scaleX;
                } else {
                    renderBufferHeight = (int) maxSize;
                    renderBufferWidth = (int) (bitmap.getWidth() * scaleY);
                    scale = scaleY;
                }
            }

            if (orientation % 360 == 90 || orientation % 360 == 270) {
                int temp = renderBufferWidth;
                renderBufferWidth = renderBufferHeight;
                renderBufferHeight = temp;
            }

            bitmap = createBitmap(bitmap, orientation, renderBufferWidth, renderBufferHeight, scale);
        }

        GLES20.glBindTexture(GL10.GL_TEXTURE_2D, renderTexture[1]);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
    } else {
        GLES20.glBindTexture(GL10.GL_TEXTURE_2D, renderTexture[1]);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
        GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
        GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, renderBufferWidth, renderBufferHeight, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null);
    }

    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, renderTexture[0]);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
    GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, renderBufferWidth, renderBufferHeight, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null);

    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, renderTexture[2]);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
    GLES20.glTexParameteri(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
    GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, renderBufferWidth, renderBufferHeight, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null);
}
 
Example 18
Source File: ImageRenderer.java    From ARCore-Location with MIT License 4 votes vote down vote up
public void createOnGlThread(Context context, String pngName) {
    // Read the texture.
    Bitmap textureBitmap = null;
    try {
        textureBitmap = BitmapFactory.decodeStream(context.getAssets().open(pngName));

        // Adjusts size of 3D shape to keep image aspect correct
        float adjustedWidth = ((float)textureBitmap.getWidth() / 250) / 2;
        float adjustedHeight = ((float)textureBitmap.getHeight() / 250) / 2;
        QUAD_COORDS = new float[] {
                // x, y, z
                -adjustedWidth, -adjustedHeight, 0.0f,
                -adjustedWidth, +adjustedHeight, 0.0f,
                +adjustedWidth, -adjustedHeight, 0.0f,
                +adjustedWidth, +adjustedHeight, 0.0f,
        };
    } catch (IOException e) {
        Log.e(TAG, "Exception reading texture", e);
        return;
    }

    GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
    GLES20.glGenTextures(mTextures.length, mTextures, 0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures[0]);

    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, textureBitmap, 0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);

    textureBitmap.recycle();

    ShaderUtil.checkGLError(TAG, "Texture loading");

    // Build the geometry of a simple imageRenderer.

    int numVertices = 4;
    if (numVertices != QUAD_COORDS.length / COORDS_PER_VERTEX) {
        throw new RuntimeException("Unexpected number of vertices in BackgroundRenderer.");
    }

    ByteBuffer bbVertices = ByteBuffer.allocateDirect(QUAD_COORDS.length * Float.BYTES);
    bbVertices.order(ByteOrder.nativeOrder());
    mQuadVertices = bbVertices.asFloatBuffer();
    mQuadVertices.put(QUAD_COORDS);
    mQuadVertices.position(0);

    ByteBuffer bbTexCoords =
            ByteBuffer.allocateDirect(numVertices * TEXCOORDS_PER_VERTEX * Float.BYTES);
    bbTexCoords.order(ByteOrder.nativeOrder());
    mQuadTexCoord = bbTexCoords.asFloatBuffer();
    mQuadTexCoord.put(QUAD_TEXCOORDS);
    mQuadTexCoord.position(0);

    ByteBuffer bbTexCoordsTransformed =
            ByteBuffer.allocateDirect(numVertices * TEXCOORDS_PER_VERTEX * Float.BYTES);
    bbTexCoordsTransformed.order(ByteOrder.nativeOrder());

    int vertexShader = loadGLShader(TAG, GLES20.GL_VERTEX_SHADER, VERTEX_SHADER);
    int fragmentShader = loadGLShader(TAG, GLES20.GL_FRAGMENT_SHADER, FRAGMENT_SHADER);

    mQuadProgram = GLES20.glCreateProgram();
    GLES20.glAttachShader(mQuadProgram, vertexShader);
    GLES20.glAttachShader(mQuadProgram, fragmentShader);
    GLES20.glLinkProgram(mQuadProgram);
    GLES20.glUseProgram(mQuadProgram);

    ShaderUtil.checkGLError(TAG, "Program creation");

    mQuadPositionParam = GLES20.glGetAttribLocation(mQuadProgram, "a_Position");
    mQuadTexCoordParam = GLES20.glGetAttribLocation(mQuadProgram, "a_TexCoord");
    mTextureUniform = GLES20.glGetUniformLocation(mQuadProgram, "u_Texture");
    mModelViewProjectionUniform =
            GLES20.glGetUniformLocation(mQuadProgram, "u_ModelViewProjection");

    ShaderUtil.checkGLError(TAG, "Program parameters");

    Matrix.setIdentityM(mModelMatrix, 0);
}
 
Example 19
Source File: FileTextureSource.java    From Tanks with MIT License 4 votes vote down vote up
private int loadTexture()
{
  ResultRunnable<Integer> runnable = new ResultRunnable<Integer>()
  {
    @Override
    protected Integer onRun()
    {
      try
      {
        String fileName = getTextureFileName(name);
        InputStream stream = GameContext.context.getAssets().open(fileName);
        Bitmap bitmap = BitmapFactory.decodeStream(stream);
        stream.close();

        int type = GLUtils.getType(bitmap);
        int format = GLUtils.getInternalFormat(bitmap);
        int error;

        int[] textures = new int[1];

        GLES20.glGenTextures(1, textures, 0);
        if ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR)
          throw new GLException(error);

        GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
        if ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR)
          throw new GLException(error);

        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
        if ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR)
          throw new GLException(error);

        GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, format, bitmap, type, 0);
        if ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR)
          throw new GLException(error);

        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);

        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);

        if (generateMipmap)
        {
          GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);
          if ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR)
            throw new GLException(error, Integer.toString(error));
        }

        bitmap.recycle();
        return textures[0];
      }
      catch(Exception e)
      {
        throw new RuntimeException(e);
      }
    }
  };

  GameContext.glThread.sendEvent(runnable);
  return runnable.getResult();
}
 
Example 20
Source File: GLRenderer.java    From bombsquad-remote-android with Apache License 2.0 4 votes vote down vote up
private int loadTexture(int resource) {

    // In which ID will we be storing this texture?
    int id = newTextureID();

    // We need to flip the textures vertically:
    android.graphics.Matrix flip = new android.graphics.Matrix();
    flip.postScale(1f, -1f);

    // This will tell the BitmapFactory to not scale based on the device's
    // pixel density:
    // (Thanks to Matthew Marshall for this bit)
    BitmapFactory.Options opts = new BitmapFactory.Options();
    opts.inScaled = false;

    // Load up, and flip the texture:
    Bitmap temp =
        BitmapFactory.decodeResource(_context.getResources(), resource, opts);
    Bitmap bmp = Bitmap
        .createBitmap(temp, 0, 0, temp.getWidth(), temp.getHeight(), flip,
            true);
    temp.recycle();

    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, id);

    // Set all of our texture parameters:
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
        GLES20.GL_LINEAR_MIPMAP_LINEAR);
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER,
        GLES20.GL_LINEAR);
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
        GLES20.GL_REPEAT);
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
        GLES20.GL_REPEAT);

    // Generate, and load up all of the mipmaps:
    for (int level = 0, height = bmp.getHeight(), width =
         bmp.getWidth(); true; level++) {
      // Push the bitmap onto the GPU:
      GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, level, bmp, 0);

      // We need to stop when the texture is 1x1:
      if (height == 1 && width == 1) {
        break;
      }

      // Resize, and let's go again:
      width >>= 1;
      height >>= 1;
      if (width < 1) {
        width = 1;
      }
      if (height < 1) {
        height = 1;
      }

      Bitmap bmp2 = Bitmap.createScaledBitmap(bmp, width, height, true);
      bmp.recycle();
      bmp = bmp2;
    }
    bmp.recycle();

    return id;
  }