- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,它不是字面意义上的“Hello World!”程序,但等效:它使用 WebGL 渲染上下文将几个三角形输出到 Canvas 。
该程序按其应有的方式工作,但是有什么方法可以摆脱程序后半部分中那些讨厌的动态转换和不雅的 Scalajs Arrays 初始化。显然,我可以创建自己的实用程序函数/类(我使用自己的实用程序来生成着色器源代码),但我更愿意尽可能使用 scalajs 标准方法。
package pClient
import org.scalajs._
import dom._
import pUtil._
object ClientApp extends scalajs.js.JSApp
{
def main(): Unit =
{
var can: html.Canvas = document.createElement("canvas").asInstanceOf[html.Canvas]
document.body.appendChild(can)
can.width = window.innerWidth
can.height = window.innerHeight - 60
import raw.WebGLRenderingContext._
var gl: raw.WebGLRenderingContext = can.getContext("webgl").asInstanceOf[raw.WebGLRenderingContext]
gl.clearColor(0.4, 0.0, 0.5, 0.8)
gl.clear(COLOR_BUFFER_BIT)
var vShader = gl.createShader(VERTEX_SHADER)
var vertText = "attribute vec2 position;" -+ VMain(Seq("gl_Position = vec4(position, 0, 1);")).out(0)
gl.shaderSource(vShader, vertText)
gl.compileShader(vShader)
var fShader = gl.createShader(FRAGMENT_SHADER)
var fragText = "precision highp float;" -+ "uniform vec4 color;" -+ VMain(Seq("gl_FragColor = vec4(0, 1, 0, 1);")).out(0)
gl.shaderSource(fShader, fragText)
gl.compileShader(fShader)
var program = gl.createProgram()
gl.attachShader(program, vShader)
gl.attachShader(program, fShader)
gl.linkProgram(program)
var tempVertices: scalajs.js.Array[Float] = scalajs.js.Array[Float]()
tempVertices.push(-0.3f,-0.3f, 0.3f,-0.3f, 0.0f,0.3f, 0.2f,0.2f, 0.6f, 0.6f, 0.4f, -0.4f)
import scalajs.js.typedarray.Float32Array
var vertices: Float32Array = new Float32Array(tempVertices)
var buffer = gl.createBuffer()
gl.bindBuffer(ARRAY_BUFFER, buffer)
gl.bufferData(ARRAY_BUFFER, vertices, STATIC_DRAW)
gl.useProgram(program)
var progDyn = program.asInstanceOf[scalajs.js.Dynamic]
progDyn.color = gl.getUniformLocation(program, "color")
var temp2 = scalajs.js.Array[Double]()
temp2.push(0f, 1f, 0.5f, 1.0f)
gl.uniform4fv(progDyn.color.asInstanceOf[raw.WebGLUniformLocation], temp2)
progDyn.position = gl.getAttribLocation(program, "position")
gl.enableVertexAttribArray(progDyn.position.asInstanceOf[Int])
gl.vertexAttribPointer(progDyn.position.asInstanceOf[Int], 2, FLOAT, false, 0, 0)
gl.drawArrays(TRIANGLES, 0, vertices.length / 2)
}
}
scalajs-cli-assembly_2.11-0.6.5.jar
scalajs-compiler_2.11.7-0.6.5.jar
scalajs-dom_sjs0.6_2.11-0.9.0-SNAPSHOT.jar
scalajs-library_2.11-0.6.5.jar
enablePlugins(ScalaJSPlugin)
name := "ScalaClient"
scalaVersion := "2.11.7"
libraryDependencies += "org.scala-js" %%% "scalajs-dom" % "0.8.0"
scalaSource in Compile := baseDirectory.value / "src"
scalacOptions := Seq("-feature", "-language:implicitConversions", "-deprecation", "-target:jvm-1.8")
unmanagedSourceDirectories in Compile += file("/sdat/scalaPackages/pUtil")
最佳答案
您可以像这样显着改进数组初始化:
import scala.scalajs.js // common import in Scala.js
import scala.scalajs.js.typedarray._
val vertices = new Float32Array(js.Array(
-0.3f,-0.3f, 0.3f,-0.3f, 0.0f,0.3f, 0.2f,0.2f,
0.6f,0.6f, 0.4f,-0.4f))
js.Dynamic
,这主要是由于 WebGL 的类型不够好。
WebGLProgram
此时为空。随意对这些类型进行改进!
关于Scalajs WebGL "Hello World!",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34354400/
如何使用 sbt-scalajs 插件排除 scalajs 依赖? 我正在尝试导入以下库 "org.webjars.bower" % "react-bootstrap-datetimepicker"
这些 Scala.js React.js 库之间有什么区别,我为什么要选择一个而不是另一个? Xored Scalajs-react - 最后一次提交是 8 个月前。所以我猜测开发不再活跃。 Scal
来自 Scala.js 的 sbt fastOptJS ,我只想重定向 myproject/target/scala-2.11/web-fastopt.js至myproject/js这可能吗? 同样适
在使用 ScalaJS 时,我可以像这样导出一个对象和所有成员 @JSExport object Thing { @JSExport def doThing(x:Int) = x * 2 }
好吧,它不是字面意义上的“Hello World!”程序,但等效:它使用 WebGL 渲染上下文将几个三角形输出到 Canvas 。 该程序按其应有的方式工作,但是有什么方法可以摆脱程序后半部分中那些
scala.js 是否与 scala ZIO 一起使用? 我想在 scala.js 中使用 scala ZIO 我只知道如何在普通应用程序中使用 scala ZIO 有谁知道如何在 scala.js
是否可以在浏览器中运行生成的js测试代码? ScalaJS 似乎在目标目录下生成以下 js 文件 (project-name)-test-fastopt.js (project-name)-test-
关于 scalajs 和 javascript 的问题。 如何将函数标记为纯粹导出到全局范围? 给定顶级包中的 scala 对象 @JSExport object Foo{ def apply(a:
如果我正确理解 scalajs 文档,它只允许每个项目生成一个 javascript。有没有办法避免这种限制? 目前我为 Play 框架创建了 scalajs 子项目。在这个子项目中,我计划为我正在处
我希望使用 ScalaJ-Http 作为 http 客户端。链接:https://github.com/scalaj/scalaj-http 我将如何模拟 Http或 HttpRequest在具有这样
我将 scalajs 0.6.15 与 scalajs-react 0.11.3 和 reactjs 15.4.2 一起使用。 考虑一个组件 SomeComp,其中 Props 的值类型需要参数化。
我想编写 Scala 代码,然后可以将其转换为 EmberJS 代码。 可以做到吗?如果不是开箱即用的关于如何通过破解 ScalaJS 来实现的任何建议? 问候。 最佳答案 Scala.js 可以发出
我有一个我想从 JS 调用的 ScalaJS 函数,它有一个 Option[String] 参数。我不知道如何从 JS 创建 Some[String] 和 None[String]。 最佳答案 简短的
在下面的代码示例中,当使用 scalatest 测试 Scala 时,如何等待 ajaxCall() 完成才能开始 test 1 .js 代码?我不能在 Scala.js 中使用 await。 cla
我是 Scala.js 的新手。我想使用 Argonaut json 库。 https://github.com/argonaut-io/argonaut 它唯一的依赖项似乎是 Monocle 和 S
(前面的问题很长。简化的tl;底部的博士)。 我有两个使用 SBT 构建的 ScalaJS 项目——“myapp”和“mylib”,位于以下目录结构中 root/build.sbt root/myap
编辑: 截至2013年1月27日的版本信息: Scala 2.10.0 IntelliJ IDEA Leda 123.139 (EAP) Scala Plugin version 0.7.108 (N
尝试获取Ajax.post失败的原因(使用Scala.Js),但仅获取类名称: Ajax.post( url = "...", data = "...", headers = Map("C
我有一个跨项目 Scala/ScalaJS。当我在客户端模块中运行测试时,出现以下异常: IJ]sbt:pme123-adapters-client> testOnly ... [info] Fast
我找到了 scalaj-collections它看起来是唯一可以让我将 Java.util.List 转换为 scala.collection.Seq 的库。 我可以在我的 Java 项目中使用这个库
我是一名优秀的程序员,十分优秀!