Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

changes in Renderer api: created universal windowWidth/windowHeight f…

…unctions, improved changeResolution method. Still unstable: need to make RenderLib an object, not a trait
  • Loading branch information...
commit aba8ff968e1611c545298c6506f17600337c9ee1 1 parent 3d36364
Andrey Borunov authored
Showing with 38 additions and 6 deletions.
  1. +29 −6 src/main/scala/net/scage/handlers/Renderer.scala
  2. +9 −0 todo
View
35 src/main/scala/net/scage/handlers/Renderer.scala
@@ -40,13 +40,25 @@ trait RendererLib {
}
def currentColor_=(c:ScageColor) {if(c != DEFAULT_COLOR) GL11.glColor3f(c.red, c.green, c.blue)}
+ private val lists = ArrayBuffer[(Int, () => Unit)]()
def displayList(func: => Unit) = {
val list_code = /*nextDisplayListKey*/nextId
GL11.glNewList(list_code, GL11.GL_COMPILE);
func
GL11.glEndList();
+ lists += (list_code, () => func)
list_code
}
+ def reloadDisplayLists() {
+ println(lists.mkString("(", ", ", ")"))
+ for {
+ (list_code, func) <- lists
+ } {
+ GL11.glNewList(list_code, GL11.GL_COMPILE);
+ func()
+ GL11.glEndList();
+ }
+ }
def openglLocalTransform(transform: => Unit) {
GL11.glPushMatrix()
@@ -316,6 +328,10 @@ trait RendererLib {
def windowSize = {
Vec(Display.getDisplayMode.getWidth, Display.getDisplayMode.getHeight)
}
+
+ def windowWidth = Display.getDisplayMode.getWidth
+ def windowHeight = Display.getDisplayMode.getHeight
+ def title = Display.getTitle
}
object RendererLib extends RendererLib
@@ -327,18 +343,25 @@ trait RendererInitializer {
private val log = Logger(this.getClass.getName)
private var _window_width:Int = 800
- def windowWidth = _window_width // maybe just Display.getDisplayMode.getWidth
+ //def windowWidth = _window_width // maybe just Display.getDisplayMode.getWidth
private var _window_height:Int = 600
- def windowHeight = _window_height
+ /*def windowHeight = _window_height*/
private var _title:String = ""
- def title = _title
+ /*def title = _title*/
def changeResolution(new_window_width:Int = _window_width, new_window_height:Int = _window_height) {
- destroygl()
- initgl(new_window_width, new_window_height)
- reloadFont()
+ if(new_window_width != _window_width && new_window_height != _window_height) {
+ val backup_background_color = backgroundColor
+ val backup_current_color = currentColor
+ destroygl()
+ initgl(new_window_width, new_window_height)
+ reloadFont()
+ reloadDisplayLists()
+ currentColor = backup_current_color
+ backgroundColor = backup_background_color
+ }
}
def changeTitle(new_title:String = _title) {
View
9 todo
@@ -21,6 +21,15 @@
is_main_unit=true
----------------
+сделать для ScageScreen тоже возможность задавать тайтл в качестве параметра....
+
+Запущенный дочерний скрин может попортить ряд графических параметров, и при возврате из него, неплохо бы их автоматически
+восстанавливать. Это очень легко сделать, надо запилить метод runScreen() внутри какого-нить скринового трейта, и в нем уже
+вызывать метод run(), перед ним сохраняя парамы, и после возврата из него восстанавливая их. Нужно только определить этот
+набор восстанавливаемых параметров. На первый взгляд: backgroundColor, currentColor
+--
+еще при смене разрешения все сбрасывается
+
Набор методов в Vec, меняющие его внутренние поля - подумать о целесообразности. Многое бы упростилось и мб ускорилось,
но и возможностей для багов больше.
--
Please sign in to comment.
Something went wrong with that request. Please try again.