remove bufferviewindex
This commit is contained in:
parent
8e6f6cc233
commit
1ee752c5c3
|
@ -34,8 +34,8 @@ extension GLTF {
|
|||
|
||||
if loadLevel == .all {
|
||||
var buffers = [GLTFBuffer]()
|
||||
for bViewIndex in descriptor.sources {
|
||||
let buffer = self.buffers![self.bufferViews![bViewIndex].buffer]
|
||||
for bView in descriptor.sources {
|
||||
let buffer = self.buffers![bView.buffer]
|
||||
buffers.append(buffer)
|
||||
}
|
||||
|
||||
|
@ -65,28 +65,27 @@ extension GLTF {
|
|||
} else {
|
||||
let sizeWidth = (loadLevel == .first) ? 32 : descriptor.width
|
||||
let sizeHeight = (loadLevel == .first) ? 32 : descriptor.height
|
||||
let index = (loadLevel == .first) ? descriptor.sources.last! : descriptor.sources.first!
|
||||
let bufferView = (loadLevel == .first) ? descriptor.sources.last! : descriptor.sources.first!
|
||||
|
||||
if let bView = self.bufferViews?[index] {
|
||||
let buffer_ = self.buffers![bView.buffer]
|
||||
self.loader.load(gltf:self, resource: buffer_, options: ResourceType.texture) { (buffer, error) in
|
||||
var error_ = error
|
||||
var textureResult:Any?
|
||||
var datas = [Data]()
|
||||
if buffer.data != nil {
|
||||
datas.append(buffer.data!)
|
||||
do {
|
||||
textureResult = try self._createMetalTexture(sizeWidth, sizeHeight, pixelFormat, datas, bytesPerRow)
|
||||
} catch {
|
||||
error_ = error
|
||||
}
|
||||
} else {
|
||||
error_ = GLTFError("Can't load data for \(buffer.uri ?? "")")
|
||||
let buffer_ = self.buffers![bufferView.buffer]
|
||||
self.loader.load(gltf:self, resource: buffer_, options: ResourceType.texture) { (buffer, error) in
|
||||
var error_ = error
|
||||
var textureResult:Any?
|
||||
var datas = [Data]()
|
||||
if buffer.data != nil {
|
||||
datas.append(buffer.data!)
|
||||
do {
|
||||
textureResult = try self._createMetalTexture(sizeWidth, sizeHeight, pixelFormat, datas, bytesPerRow)
|
||||
} catch {
|
||||
error_ = error
|
||||
}
|
||||
|
||||
completionHandler(textureResult, error_)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
error_ = GLTFError("Can't load data for \(buffer.uri ?? "")")
|
||||
}
|
||||
|
||||
completionHandler(textureResult, error_)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -104,25 +104,45 @@ extension GLTF {
|
|||
}
|
||||
}
|
||||
|
||||
internal static func requestData(glTF: GLTF, bufferView:GLTFBufferView) throws -> Data? {
|
||||
if let buffer = glTF.buffers?[bufferView.buffer] {
|
||||
|
||||
if let data = try glTF.loader.load(gltf:glTF, resource: buffer) {
|
||||
return data
|
||||
}
|
||||
} else {
|
||||
throw GLTFError("Can't load data! Can't find buffer at index \(bufferView.buffer)")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
// internal static func requestData(glTF: GLTF, bufferView:GLTFBufferView) throws -> Data? {
|
||||
// if let buffer = glTF.buffers?[bufferView.buffer] {
|
||||
//
|
||||
// if let data = try glTF.loader.load(gltf:glTF, resource: buffer) {
|
||||
// return data
|
||||
// }
|
||||
// } else {
|
||||
// throw GLTFError("Can't load data! Can't find buffer at index \(bufferView.buffer)")
|
||||
// }
|
||||
// return nil
|
||||
// }
|
||||
|
||||
internal static func requestData(glTF: GLTF, bufferView:Int) throws -> (GLTFBufferView, Data)? {
|
||||
if let bufferView = glTF.bufferViews?[bufferView] {
|
||||
if let data = try requestData(glTF: glTF, bufferView: bufferView) {
|
||||
// internal static func requestData(glTF: GLTF, bufferView:Int) throws -> (GLTFBufferView, Data)? {
|
||||
// if let bufferView = glTF.bufferViews?[bufferView] {
|
||||
// if let data = try requestData(glTF: glTF, bufferView: bufferView) {
|
||||
// return (bufferView, data)
|
||||
// }
|
||||
// } else {
|
||||
// throw GLTFError("Can't load data! Can't find bufferView at index \(bufferView)")
|
||||
// }
|
||||
// return nil
|
||||
// }
|
||||
|
||||
internal static func requestData(glTF: GLTF, bufferView:GLTFBufferView) throws -> (GLTFBufferView, Data)? {
|
||||
// if let bufferView = glTF.bufferViews?[bufferView] {
|
||||
// if let data = try requestData(glTF: glTF, bufferView: bufferView) {
|
||||
// return (bufferView, data)
|
||||
// }
|
||||
// } else {
|
||||
// throw GLTFError("Can't load data! Can't find bufferView at index \(bufferView)")
|
||||
// }
|
||||
// return nil
|
||||
|
||||
if let buffer = glTF.buffers?[bufferView.buffer] {
|
||||
if let data = try glTF.loader.load(gltf:glTF, resource: buffer) {
|
||||
return (bufferView, data)
|
||||
}
|
||||
} else {
|
||||
throw GLTFError("Can't load data! Can't find bufferView at index \(bufferView)")
|
||||
} else {
|
||||
throw GLTFError("Can't load data! Can't find buffer at index \(bufferView.buffer)")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -111,7 +111,7 @@ import Foundation
|
|||
@objcMembers
|
||||
open class GLTFAccessor : NSObject, Codable {
|
||||
/// The index of the bufferView.
|
||||
public var bufferView:Int?
|
||||
public var bufferView:GLTFBufferView?
|
||||
|
||||
/// The offset relative to the start of the bufferView in bytes.
|
||||
public var byteOffset:Int
|
||||
|
@ -163,7 +163,7 @@ open class GLTFAccessor : NSObject, Codable {
|
|||
|
||||
required public init(from decoder: Decoder) throws {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
bufferView = try? container.decode(Int.self, forKey: .bufferView)
|
||||
bufferView = try? container.decode(GLTFBufferView.self, forKey: .bufferView)
|
||||
do {
|
||||
byteOffset = try container.decode(Int.self, forKey: .byteOffset)
|
||||
} catch {
|
||||
|
|
|
@ -40,7 +40,7 @@ import Foundation
|
|||
@objcMembers
|
||||
open class GLTFImage : NSObject, Codable {
|
||||
/// The index of the bufferView that contains the image. Use this instead of the image's uri property.
|
||||
public var bufferView:Int?
|
||||
public var bufferView:GLTFBufferView?
|
||||
|
||||
/// Dictionary object with extension-specific objects.
|
||||
public var extensions:[String: Any]?
|
||||
|
@ -70,7 +70,7 @@ open class GLTFImage : NSObject, Codable {
|
|||
|
||||
required public init(from decoder: Decoder) throws {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
bufferView = try? container.decode(Int.self, forKey: .bufferView)
|
||||
bufferView = try? container.decode(GLTFBufferView.self, forKey: .bufferView)
|
||||
extensions = try? container.decode([String: Any].self, forKey: .extensions)
|
||||
extras = try? container.decode([String: Any].self, forKey: .extras)
|
||||
mimeType = try? container.decode(GLTFImageMimeType.self, forKey: .mimeType)
|
||||
|
|
|
@ -17,14 +17,14 @@ open class GLTFKHRDracoMeshCompressionExtension : NSObject, Codable {
|
|||
public var attributes:[String: Int]
|
||||
|
||||
/// The index of the bufferView.
|
||||
public var bufferView:Int
|
||||
public var bufferView:GLTFBufferView
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case attributes
|
||||
case bufferView
|
||||
}
|
||||
|
||||
public init(attributes a:[String: Int], bufferView bv:Int) {
|
||||
public init(attributes a:[String: Int], bufferView bv:GLTFBufferView) {
|
||||
attributes = a
|
||||
bufferView = bv
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ open class GLTFKHRDracoMeshCompressionExtension : NSObject, Codable {
|
|||
required public init(from decoder: Decoder) throws {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
attributes = try container.decode([String: Int].self, forKey: .attributes)
|
||||
bufferView = try container.decode(Int.self, forKey: .bufferView)
|
||||
bufferView = try container.decode(GLTFBufferView.self, forKey: .bufferView)
|
||||
}
|
||||
|
||||
public func encode(to encoder: Encoder) throws {
|
||||
|
|
|
@ -123,12 +123,11 @@ extension GLTFAccessor {
|
|||
|
||||
fileprivate extension GLTF {
|
||||
//let buffer = glTF.buffers![glTF.bufferViews![bufferView].buffer]
|
||||
func buffer(for bufferView: Int) -> GLTFBuffer? {
|
||||
if let bufferIndex = self.bufferViews?[bufferView].buffer {
|
||||
return self.buffers?[bufferIndex]
|
||||
}
|
||||
func buffer(for bufferView: GLTFBufferView) -> GLTFBuffer? {
|
||||
let bufferIndex = bufferView.buffer
|
||||
return self.buffers?[bufferIndex]
|
||||
|
||||
return nil
|
||||
// return nil
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -268,8 +267,7 @@ extension GLTFConverter {
|
|||
fileprivate func geometryElement(_ primitive: GLTFMeshPrimitive) throws -> SCNGeometryElement? {
|
||||
if let indicesIndex = primitive.indices {
|
||||
if let accessor = glTF.accessors?[indicesIndex],
|
||||
let bufferViewIndex = accessor.bufferView,
|
||||
let bufferView = glTF.bufferViews?[bufferViewIndex] {
|
||||
let bufferView = accessor.bufferView {
|
||||
|
||||
if let indicesData = try loadAcessor(accessor, bufferView, false) {
|
||||
|
||||
|
@ -309,7 +307,7 @@ extension GLTFConverter {
|
|||
var geometrySources = [SCNGeometrySource]()
|
||||
|
||||
// accessors can point to different buffers. We cache last one.
|
||||
var previousBufferView = -1
|
||||
var previousBufferView: GLTFBufferView?
|
||||
var mtlBuffer:MTLBuffer?
|
||||
|
||||
var byteOffset = 0
|
||||
|
@ -417,11 +415,11 @@ extension GLTFConverter {
|
|||
// determine where an accessor and a bufferView link are interleaved or not
|
||||
internal func determineAcessor(_ accessor:GLTFAccessor) throws -> (GLTFBufferView, Bool)? {
|
||||
|
||||
guard let index = accessor.bufferView else {
|
||||
guard let bufferView = accessor.bufferView else {
|
||||
throw GLTFError("Missing 'bufferView' for \(accessor.name ?? "") acessor")
|
||||
}
|
||||
|
||||
if let bufferView = glTF.bufferViews?[index] {
|
||||
// if let bufferView = glTF.bufferViews?[index] {
|
||||
|
||||
// Interleaved data usualy has bytesStride as correct value.
|
||||
// Some times non-interleaved data also has bytesStride, and in some cases don't. It's up to exporter
|
||||
|
@ -431,15 +429,15 @@ extension GLTFConverter {
|
|||
|
||||
let interleaved = (byteStride != accessorByteStride)
|
||||
return (bufferView, interleaved)
|
||||
}
|
||||
return nil
|
||||
// }
|
||||
// return nil
|
||||
}
|
||||
|
||||
|
||||
// get data by accessor
|
||||
internal func loadAcessor(_ accessor:GLTFAccessor, _ bufferView:GLTFBufferView, _ interleaved:Bool) throws -> Data? {
|
||||
|
||||
if let data = try GLTF.requestData(glTF: glTF, bufferView: bufferView) {
|
||||
if let (bufferView, data) = try GLTF.requestData(glTF: glTF, bufferView: bufferView) {
|
||||
|
||||
var byteStride:Int = bufferView.byteStride ?? 0
|
||||
if (byteStride == 0) {
|
||||
|
|
|
@ -357,7 +357,7 @@ open class GLTF_3D4MCompressedTextureExtension : Codable {
|
|||
public var height:Int
|
||||
|
||||
/// Texture index of bufferView used for each level of texture. First source representing level 0. Each next is divide by 2 of previous texture size. For example 0 level is 1024, next is 512 and next 256 ans so on.
|
||||
public var sources:[Int]
|
||||
public var sources:[GLTFBufferView]
|
||||
|
||||
/// Texture 2D target.
|
||||
public var target:GLTF_3D4MCompressedTextureExtensionTarget
|
||||
|
@ -373,7 +373,7 @@ open class GLTF_3D4MCompressedTextureExtension : Codable {
|
|||
public init(compression c:GLTF_3D4MCompressedTextureExtensionCompression,
|
||||
width w:Int,
|
||||
height h:Int,
|
||||
sources s:[Int],
|
||||
sources s:[GLTFBufferView],
|
||||
target t:GLTF_3D4MCompressedTextureExtensionTarget) {
|
||||
compression = c
|
||||
width = w
|
||||
|
@ -390,7 +390,7 @@ open class GLTF_3D4MCompressedTextureExtension : Codable {
|
|||
} catch {
|
||||
height = 0
|
||||
}
|
||||
sources = try container.decode([Int].self, forKey: .sources)
|
||||
sources = try container.decode([GLTFBufferView].self, forKey: .sources)
|
||||
do {
|
||||
target = try container.decode(GLTF_3D4MCompressedTextureExtensionTarget.self, forKey: .target)
|
||||
} catch {
|
||||
|
|
Loading…
Reference in New Issue