android.opengl.GLUtils#texImage2D ( )源码实例Demo

下面列出了android.opengl.GLUtils#texImage2D ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: media-for-mobile   文件: OverlayEffect.java
@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");
}
 
源代码2 项目: libcommon   文件: GLTexture.java
/**
	 * 指定したビットマップをテクスチャに読み込む
 	 * @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();
	}
 
源代码3 项目: Rocko-Android-Demos   文件: MainActivity.java
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();
}
 
源代码4 项目: media-for-mobile   文件: JpegSubstituteEffect.java
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);
}
 
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();
}
 
源代码6 项目: PhotoEditor   文件: ImageFilterView.java
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();
    }
}
 
源代码7 项目: LearnOpenGL   文件: Utils.java
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];
}
 
源代码8 项目: TelePlus-Android   文件: IntroActivity.java
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);
    }
}
 
源代码9 项目: libcommon   文件: GLHelper.java
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;
}
 
源代码10 项目: OpenGLESRecorder   文件: Shape.java
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);
}
 
/**
 * 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);
}
 
源代码12 项目: SimpleVideoEditor   文件: OpenGlUtil.java
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];
}
 
源代码13 项目: TikTok   文件: OpenGlUtils.java
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];
}
 
源代码14 项目: TelePlus-Android   文件: IntroActivity.java
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);
    }
}
 
源代码15 项目: bombsquad-remote-android   文件: GLRenderer.java
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;
  }
 
源代码16 项目: Telegram   文件: FilterShaders.java
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);
}
 
源代码17 项目: AndroidPlayground   文件: GLImage.java
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);
}
 
源代码18 项目: Telegram-FOSS   文件: FilterShaders.java
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);
}
 
源代码19 项目: ARCore-Location   文件: ImageRenderer.java
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);
}
 
源代码20 项目: Tanks   文件: FileTextureSource.java
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();
}