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 |
@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 |
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 |
/** * 指定したビットマップをテクスチャに読み込む * @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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
/** * 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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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; }