因此,我创建了一个更简单的抽象级别,以便在我的 Flutter 应用程序中使用 Hive。这应该是管理和访问所有配置单元的中心点。由于eggetApplicationDocumentsDirectory在测试期间不可用,我如何才能测试整个文件?
import '../services/workout.dart';
import 'package:hive/hive.dart';
import 'package:path_provider/path_provider.dart' as path_rovider;
import 'workout.dart';
class HiveService {
static final HiveService _singleton = HiveService._internal();
static const String _workoutBox = "workoutBox";
factory HiveService() {
return _singleton;
}
HiveService._internal();
static Future<void> init() async {
final appDocumentDirectory =
await path_rovider.getApplicationDocumentsDirectory();
Hive.init(appDocumentDirectory.path);
Hive.registerAdapter(WorkoutAdapter());
}
static Future openWorkouts() {
return Hive.openBox<Workout>(_workoutBox);
}
static Future close() {
return Hive.close();
}
}
Run Code Online (Sandbox Code Playgroud) 我使用了WEBKIT_WEBGL_depth_texture扩展.并初始化缓冲区.但是我怎么能画这个帧缓冲?我现在总是被困住了.-.-
function InitDepthtextures (){
var size = 256;
// Create a color texture
var colorTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, colorTexture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size, size, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
// Create the depth texture
depthTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, depthTexture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, size, size, 0, gl.DEPTH_COMPONENT, gl.UNSIGNED_SHORT, null);
framebuffer = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, colorTexture, …Run Code Online (Sandbox Code Playgroud) 我在 chrome 中使用 WEBGL_depth_texture 将场景渲染到具有颜色和深度纹理的帧缓冲区。当我显示我的颜色纹理时效果很好,但我的深度纹理全是白色的。不应该像灰色吗?
我的绘制纹理功能:
this.drawTexture = function() {
//gl.viewport(0, 0, this.canvas.width, this.canvas.height);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertBuffer);
gl.vertexAttribPointer(this.VertexPosition, 2, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertTexCoordBuffer);
gl.vertexAttribPointer(this.VertexTexture, 2, gl.FLOAT, false, 0, 0);
gl.bindTexture(gl.TEXTURE_2D, this.depthTexture);
gl.drawArrays(gl.TRIANGLES, 0, 6);
gl.bindTexture(gl.TEXTURE_2D, null);
Run Code Online (Sandbox Code Playgroud)
在里面:
this.colorTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, this.colorTexture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size, size, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
this.depthTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, this.depthTexture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, …Run Code Online (Sandbox Code Playgroud) 如何更改 Glsl 中矩阵中的值?我想改变第三列中 nMatrix 的错误。
到目前为止我尝试过这个:
mat4 nMatrix;
for (int i = 0; i < 3; i++) {
nMatrix = uMatrix;
for (int k = 0; k < 2; k++) {
//nMatrix[3].xyz = 0.0;
nMatrix[3][k]= 0.0;
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个编译错误:
将向量从大小 1 隐式截断为大小 3。
在我的例子中count = 2.第一个工作正常,但为什么第二个不工作?对于所有循环,我等于0,因此它变为无限循环并崩溃我的浏览器选项卡.
我不是javascript的新手,但之前没有遇到过这个问题.我能想到的唯一解释是,在for循环中,不可能将计数值增加1以上.但这对我来说没有意义.
for (i = 0; i < count * 3; i++){
console.log(i);
};
Run Code Online (Sandbox Code Playgroud)
结果:0,1,2,3,4,5
for (i = 0; i < count * 3; i+3){
console.log(i);
};
Run Code Online (Sandbox Code Playgroud)
结果:0,0,0,0,0,0,0 .....
depth ×2
javascript ×2
webgl ×2
dart ×1
flutter ×1
flutter-hive ×1
framebuffer ×1
glsl ×1
opengl ×1
textures ×1
unit-testing ×1