Androidアプリケーションで使用できるように、このObjective C GPUImage FrameworkのオープンソースJavaポートを作成するように割り当てられました。私はすべての変数名、関数名などをすべて同じようにできるだけ再現したいと思います。私は初期段階にあり、私はGPUImageOpenGLESContext.hとGPUImageOpenGLESContext.mを移植しようとしています(申し訳ありませんが、リンクを提供しますが、新しいユーザーとして私はリンクを追加できません)。Android OpenGLESの最大/最小テクスチャサイズ制限の決定
私はこれらのメソッド
+ (GLint)maximumTextureSizeForThisDevice;
{
GLint maxTextureSize;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);
return maxTextureSize;
}
+ (GLint)maximumTextureUnitsForThisDevice;
{
GLint maxTextureUnits;
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
return maxTextureUnits;
}
の難しさを抱えていることは、Objective Cの中で、あなたは、単にこれらのメソッドを呼び出すことができるようですが、Javaでは、あなたがすることはできません。私はいくつかの検索を行い、ほとんどの人がGLSurfaceViewを使用すると言いましたが、これにはアクティビティが必要ですか?このGet Maximum OpenGL ES 2.0 Texture Size Limit on Androidが見つかりましたが、私は非常に興奮しましたが、応答はコードが機能しないと主張しています。
私の質問は、どのようにして、アクティビティではないクラスの最小と最大のテクスチャを得ることができるのですか? GLSurfaceViewを使用しますか?
これを移植する方法についてのご意見もありがとうございます。私はObjective CからJavaへの移植は一度もしていないので、アドバイスをいただければ幸いです!
それが参考になる場合は、ここに私の現在のコードは次のとおりです。
public class GPUImageOpenGLESContext
{
private static GPUImageOpenGLESContext instance = null;
EGLContext context;
protected GPUImageOpenGLESContext()
{
// This is a protected empty method
// that exists only to prevent
// this singleton object from
// multiple instantiation
return;
}
public enum GPUImageRotationMode {
kGPUImageNoRotation, kGPUImageRotateLeft, kGPUImageRotateRight, kGPUImageFlipVertical,
kGPUImageFlipHorizontal, kGPUImageRotateRightFlipVertical, kGPUImageRotate180
}
public GPUImageRotationMode GPUImageRotationSwapsWidthAndHeight(GPUImageRotationMode rotation)
{
// TODO: Implement GPUImageRotationSwapsWidthAndHeight macro as method
//rotation = ((rotation) == kGPUImageRotateLeft || (rotation) == kGPUImageRotateRight || (rotation) == kGPUImageRotateRightFlipVertical)
return rotation;
}
public static GPUImageOpenGLESContext sharedImageProcessingOpenGLESContext()
{
if (instance == null)
{
instance = new GPUImageOpenGLESContext();
}
return instance;
}
public static void useImageProcessingContext()
{
EGLContext imageProcessingContext = GPUImageOpenGLESContext.sharedImageProcessingOpenGLESContext().context;
if (EGLContext.getEGL() != imageProcessingContext)
{
// In Objective C, this call would be here:
// [EAGLContext setCurrentContext:imageProcessingContext]
// Cannot figure out how to handle this. For now, throws an exception.
throw new RuntimeException("useImageProcessingContext not equal to EGLContext");
}
return;
}
public static int maximumTextureSizeForThisDevice()
{
int[] maxTextureSize = new int[1];
// TODO: See if you can use gl. without an activity
//GL10 gl = new GL10();
//EGL gl = EGLContext.getEGL();
//gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxTextureSize, 0);
return maxTextureSize[0];
}
public static int maximumTextureUnitsForThisDevice()
{
// TODO: Implement maximumTextureUnitsForThisDevice();
return -1;
}
public static CGSize sizeThatFitsWithinATextureForSize(CGSize inputSize)
{
int maxTextureSize = maximumTextureSizeForThisDevice();
if ((inputSize.width < maxTextureSize) && (inputSize.height < maxTextureSize))
{
return inputSize;
}
CGSize adjustedSize = new CGSize();
if (inputSize.width > inputSize.height)
{
adjustedSize.width = (float)maxTextureSize;
adjustedSize.height = ((float)maxTextureSize/inputSize.width) * inputSize.height;
}
else
{
adjustedSize.height = (float)maxTextureSize;
adjustedSize.width = ((float)maxTextureSize/inputSize.height) * inputSize.width;
}
return adjustedSize;
}
public EGLContext getContext()
{
if (context == null)
{
// TODO: Implement getContext()
}
}
public interface GPUImageInput
{
public void newFrameReadyAtTime(Time frameTime);
public void setInputTextureAtIndex(int newInputTexture, int textureIndex);
public int nextAvailableTextureIndex();
public void setInputSizeAtIndex(CGSize newSize, int textureIndex);
public void setInputRotationAtIndex(GPUImageRotationMode newInputRotation, int textureIndex);
public CGSize maximumOutputSize();
public void endProcessing();
public boolean shouldIgnoreUpdatesToThisTarget();
}
}
完了したら、この人にそのことを知らせてください:http://stackoverflow.com/questions/11405207/gpuimage-port-for-android –
GLES20.glGetIntegervを試しましたか(GLES20.GL_MAX_TEXTURE_SIZE、サイズ、 0)。 ? – cleuton