Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some upload cleanup #203

Open
wants to merge 8 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions src/openfl/_internal/stage3D/opengl/GLCubeTexture.hx
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,19 @@ class GLCubeTexture {

var hasTexture = false;

reader.readTextures(function(side, level, gpuFormat, width, height, blockLength, bytes) {
reader.readTextures(function(side, level, gpuFormat, size, _, blockLength, bytes) {
var format = GLTextureBase.__compressedTextureFormats.toTextureFormat(alpha, gpuFormat);
if (format == 0)
return;

if (size == 0)
return;

hasTexture = true;
cubeTexture.__format = format;
cubeTexture.__internalFormat = format;

gl.compressedTexImage2D(__sideToTarget(side), level, cubeTexture.__internalFormat, width, height, 0, bytes, 0, blockLength);
gl.compressedTexImage2D(__sideToTarget(side), level, cubeTexture.__internalFormat, size, size, 0, bytes, 0, blockLength);
GLUtils.checkGLError(gl);

cubeTexture.__uploadedSides |= 1 << side;
Expand Down Expand Up @@ -72,6 +75,7 @@ class GLCubeTexture {
return;

var size = cubeTexture.__size >> miplevel;

if (size == 0)
return;

Expand All @@ -88,6 +92,9 @@ class GLCubeTexture {

public static function uploadFromByteArray(cubeTexture:CubeTexture, renderSession:GLRenderSession, data:ByteArray, byteArrayOffset:UInt, side:UInt,
miplevel:UInt = 0):Void {
if (data == null)
return;

#if js
if (byteArrayOffset == 0) {
uploadFromTypedArray(cubeTexture, renderSession, @:privateAccess (data : ByteArrayData).b, side, miplevel);
Expand All @@ -100,12 +107,10 @@ class GLCubeTexture {

public static function uploadFromTypedArray(cubeTexture:CubeTexture, renderSession:GLRenderSession, data:ArrayBufferView, side:UInt,
miplevel:UInt = 0):Void {
if (data == null)
return;

var gl = renderSession.gl;

var size = cubeTexture.__size >> miplevel;

if (size == 0)
return;

Expand All @@ -122,7 +127,7 @@ class GLCubeTexture {

cubeTexture.__uploadedSides |= 1 << side;

// var memUsage = (__size * __size) * 4;
// var memUsage = (size * size) * 4;
// __trackMemoryUsage (memUsage);
}

Expand Down
18 changes: 10 additions & 8 deletions src/openfl/_internal/stage3D/opengl/GLIndexBuffer3D.hx
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,22 @@ class GLIndexBuffer3D {
gl.deleteBuffer(indexBuffer.__id);
}

// __context.__statsDecrement(Context3D.Context3DTelemetry.COUNT_INDEX_BUFFER);
// __context.__statsSubtract(Context3D.Context3DTelemetry.MEM_INDEX_BUFFER, __memoryUsage);
// __context.__statsDecrement (Context3D.Context3DTelemetry.COUNT_INDEX_BUFFER);
// __context.__statsSubtract (Context3D.Context3DTelemetry.MEM_INDEX_BUFFER, __memoryUsage);
// __memoryUsage = 0;
}

public static function uploadFromByteArray(indexBuffer:IndexBuffer3D, renderSession:GLRenderSession, data:ByteArray, byteArrayOffset:Int, startOffset:Int,
count:Int):Void {
if (data == null)
return;

var offset = byteArrayOffset + startOffset * 2;

uploadFromTypedArray(indexBuffer, renderSession, new Int16Array(data.toArrayBuffer(), offset, count));
uploadFromTypedArray(indexBuffer, renderSession, new Int16Array(data, offset, count));
}

public static function uploadFromTypedArray(indexBuffer:IndexBuffer3D, renderSession:GLRenderSession, data:ArrayBufferView):Void {
if (data == null)
return;
var gl = renderSession.gl;

gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, indexBuffer.__id);
Expand All @@ -66,15 +67,16 @@ class GLIndexBuffer3D {
}

public static function uploadFromVector(indexBuffer:IndexBuffer3D, renderSession:GLRenderSession, data:Vector<UInt>, startOffset:Int, count:Int):Void {
// TODO: Optimize more

if (data == null)
return;

var gl = renderSession.gl;

// TODO: Optimize more

var length = startOffset + count;
var existingInt16Array = indexBuffer.__tempInt16Array;

var existingInt16Array = indexBuffer.__tempInt16Array;
if (indexBuffer.__tempInt16Array == null || indexBuffer.__tempInt16Array.length < count) {
indexBuffer.__tempInt16Array = new Int16Array(count);

Expand Down
29 changes: 13 additions & 16 deletions src/openfl/_internal/stage3D/opengl/GLRectangleTexture.hx
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ import openfl.utils.ByteArray;
@:access(openfl.display3D.Context3D)
class GLRectangleTexture {
public static function create(rectangleTexture:RectangleTexture, renderSession:GLRenderSession):Void {
var gl = renderSession.gl;

rectangleTexture.__textureTarget = GL.TEXTURE_2D;
uploadFromTypedArray(rectangleTexture, renderSession, null);
}
Expand All @@ -26,15 +24,17 @@ class GLRectangleTexture {
if (source == null)
return;

var image = rectangleTexture.__getImage(source);

if (image == null)
return;
var width = rectangleTexture.__width;
var height = rectangleTexture.__height;

GLTextureBase.uploadFromImage(renderSession.gl, rectangleTexture, image, 0, rectangleTexture.__width, rectangleTexture.__height);
var image = rectangleTexture.__getImage(source);
GLTextureBase.uploadFromImage(renderSession.gl, rectangleTexture, image, 0, width, height);
}

public static function uploadFromByteArray(rectangleTexture:RectangleTexture, renderSession:GLRenderSession, data:ByteArray, byteArrayOffset:UInt):Void {
if (data == null)
return;

#if js
if (byteArrayOffset == 0) {
uploadFromTypedArray(rectangleTexture, renderSession, @:privateAccess (data : ByteArrayData).b);
Expand All @@ -46,25 +46,22 @@ class GLRectangleTexture {
}

public static function uploadFromTypedArray(rectangleTexture:RectangleTexture, renderSession:GLRenderSession, data:ArrayBufferView):Void {
// if (__format != Context3DTextureFormat.BGRA) {
//
// throw new IllegalOperationError ();
//
// }

var gl = renderSession.gl;

var width = rectangleTexture.__width;
var height = rectangleTexture.__height;

gl.bindTexture(rectangleTexture.__textureTarget, rectangleTexture.__textureData.glTexture);
GLUtils.checkGLError(gl);

gl.texImage2D(rectangleTexture.__textureTarget, 0, rectangleTexture.__internalFormat, rectangleTexture.__width, rectangleTexture.__height, 0,
rectangleTexture.__format, GL.UNSIGNED_BYTE, data);
gl.texImage2D(rectangleTexture.__textureTarget, 0, rectangleTexture.__internalFormat, width, height, 0, rectangleTexture.__format, GL.UNSIGNED_BYTE,
data);
GLUtils.checkGLError(gl);

gl.bindTexture(rectangleTexture.__textureTarget, null);
GLUtils.checkGLError(gl);

// var memUsage = (__width * __height) * 4;
// var memUsage = (width * height) * 4;
// __trackMemoryUsage (memUsage);
}

Expand Down
27 changes: 12 additions & 15 deletions src/openfl/_internal/stage3D/opengl/GLTexture.hx
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,7 @@ import openfl.utils.ByteArray;
@:access(openfl.display3D.Context3D)
class GLTexture {
public static function create(texture:Texture, renderSession:GLRenderSession):Void {
var gl = renderSession.gl;

texture.__textureTarget = GL.TEXTURE_2D;

gl.bindTexture(texture.__textureTarget, texture.__textureData.glTexture);
GLUtils.checkGLError(gl);

gl.texImage2D(texture.__textureTarget, 0, texture.__internalFormat, texture.__width, texture.__height, 0, texture.__format, GL.UNSIGNED_BYTE, null);
GLUtils.checkGLError(gl);

gl.bindTexture(texture.__textureTarget, null);

uploadFromTypedArray(texture, renderSession, null);
}

Expand All @@ -43,11 +32,19 @@ class GLTexture {

var hasTexture = false;

reader.readTextures(function(target, level, gpuFormat, width, height, blockLength, bytes) {
reader.readTextures(function(_, level, gpuFormat, width, height, blockLength, bytes) {
var format = GLTextureBase.__compressedTextureFormats.toTextureFormat(alpha, gpuFormat);
if (format == 0)
return;

if (width == 0 && height == 0)
return;

if (width == 0)
width = 1;
if (height == 0)
height = 1;

hasTexture = true;
texture.__format = format;
texture.__internalFormat = format;
Expand Down Expand Up @@ -96,6 +93,9 @@ class GLTexture {
}

public static function uploadFromByteArray(texture:Texture, renderSession:GLRenderSession, data:ByteArray, byteArrayOffset:UInt, miplevel:UInt = 0):Void {
if (data == null)
return;

#if js
if (byteArrayOffset == 0) {
uploadFromTypedArray(texture, renderSession, @:privateAccess (data : ByteArrayData).b, miplevel);
Expand All @@ -107,9 +107,6 @@ class GLTexture {
}

public static function uploadFromTypedArray(texture:Texture, renderSession:GLRenderSession, data:ArrayBufferView, miplevel:UInt = 0):Void {
if (data == null)
return;

var gl = renderSession.gl;

var width = texture.__width >> miplevel;
Expand Down
3 changes: 3 additions & 0 deletions src/openfl/_internal/stage3D/opengl/GLTextureBase.hx
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,9 @@ class GLTextureBase {
}

public static function uploadFromImage(gl:GL, texture:TextureBase, image:Image, miplevel:Int, width:Int, height:Int, uploadTarget:Int = -1) {
if (image == null)
return;

if (uploadTarget == -1) uploadTarget = texture.__textureTarget;

gl.bindTexture(texture.__textureTarget, texture.__textureData.glTexture);
Expand Down
13 changes: 7 additions & 6 deletions src/openfl/_internal/stage3D/opengl/GLVertexBuffer3D.hx
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ class GLVertexBuffer3D {
public static function create(vertexBuffer:VertexBuffer3D, renderSession:GLRenderSession, bufferUsage:Context3DBufferUsage) {
var gl = renderSession.gl;

vertexBuffer.__stride = vertexBuffer.__vertexSize * 4;

vertexBuffer.__id = gl.createBuffer();
GLUtils.checkGLError(gl);

vertexBuffer.__stride = vertexBuffer.__vertexSize * 4;
// __memoryUsage = 0;

vertexBuffer.__usage = (bufferUsage == Context3DBufferUsage.DYNAMIC_DRAW) ? GL.DYNAMIC_DRAW : GL.STATIC_DRAW;

// __context.__statsIncrement (Context3D.Context3DTelemetry.COUNT_VERTEX_BUFFER);
// __memoryUsage = 0;
}

public static function dispose(vertexBuffer:VertexBuffer3D, renderSession:GLRenderSession):Void {
Expand All @@ -41,15 +41,16 @@ class GLVertexBuffer3D {

public static function uploadFromByteArray(vertexBuffer:VertexBuffer3D, renderSession:GLRenderSession, data:ByteArray, byteArrayOffset:Int, startVertex:Int,
numVertices:Int):Void {
if (data == null)
return;

var offset = byteArrayOffset + startVertex * vertexBuffer.__stride;
var length = numVertices * vertexBuffer.__vertexSize;

uploadFromTypedArray(vertexBuffer, renderSession, new Float32Array(data, offset, length));
}

public static function uploadFromTypedArray(vertexBuffer:VertexBuffer3D, renderSession:GLRenderSession, data:ArrayBufferView):Void {
if (data == null)
return;
var gl = renderSession.gl;

gl.bindBuffer(GL.ARRAY_BUFFER, vertexBuffer.__id);
Expand All @@ -70,6 +71,7 @@ class GLVertexBuffer3D {
numVertices:Int):Void {
if (data == null)
return;

var gl = renderSession.gl;

// TODO: Optimize more
Expand All @@ -79,7 +81,6 @@ class GLVertexBuffer3D {
var length = start + count;

var existingFloat32Array = vertexBuffer.__tempFloat32Array;

if (vertexBuffer.__tempFloat32Array == null || vertexBuffer.__tempFloat32Array.length < count) {
vertexBuffer.__tempFloat32Array = new Float32Array(count);

Expand Down
4 changes: 2 additions & 2 deletions src/openfl/display3D/IndexBuffer3D.hx
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package openfl.display3D;
import lime.graphics.opengl.GLBuffer;
import lime.utils.ArrayBufferView;
import lime.utils.Int16Array;
import openfl.Vector;
import openfl._internal.stage3D.opengl.GLIndexBuffer3D;
import openfl.utils.ByteArray;
import openfl.Vector;

@:access(openfl.display3D.Context3D)
final class IndexBuffer3D {
class IndexBuffer3D {
private var __context:Context3D;
private var __elementType:Int;
private var __id:GLBuffer;
Expand Down
3 changes: 1 addition & 2 deletions src/openfl/display3D/VertexBuffer3D.hx
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,10 @@ import openfl.utils.ByteArray;
@:access(openfl.display3D.Context3D)
class VertexBuffer3D {
private var __context:Context3D;
private var __data:Vector<Float>;
private var __stride:Int;
private var __id:GLBuffer;
private var __memoryUsage:Int;
private var __numVertices:Int;
private var __stride:Int;
private var __tempFloat32Array:Float32Array;
private var __usage:Int;
private var __vertexSize:Int;
Expand Down
2 changes: 1 addition & 1 deletion src/openfl/display3D/textures/RectangleTexture.hx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import openfl.utils.ByteArray;

@:access(openfl.display3D.Context3D)
final class RectangleTexture extends TextureBase {
private function new(context:Context3D, width:Int, height:Int, format:String, optimizeForRenderToTexture:Bool) {
private function new(context:Context3D, width:Int, height:Int, format:Context3DTextureFormat, optimizeForRenderToTexture:Bool) {
super(context);

__width = width;
Expand Down