Java-Gaming.org    
Featured games (91)
games approved by the League of Dukes
Games in Showcase (581)
games submitted by our members
Games in WIP (500)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Sharing textures over multiple GLCanvases  (Read 2044 times)
0 Members and 1 Guest are viewing this topic.
Offline JBarberU

Junior Newbie





« Posted 2012-05-07 15:53:50 »

As the title suggests I want to be able to render with the same texture on two different GLCanvases.

I'm building a toolkit (tilemap editor) which would need one GLCanvas to draw the main surface and one to draw the tileset. The reason for keeping those separate is that it makes resizing easier (JSplitPane) and tracking mouse clicks when selecting tiles from the tileset and then when placing them on the actual tilemap.

I've come up with a solution where I store my textures in a Map<GLAutoDrawable, Map<String,Texture>> where I can keep one set of textures per GLAutoDrawable and then access the textures by a string.

Although this works it feels wrong.

Any input is welcome.
Offline lhkbob

JGO Knight


Medals: 32



« Reply #1 - Posted 2012-05-07 18:32:52 »

You can share the textures between the two contexts of the GLCanvases.  GLCanvas has another constructor that takes a GLContext as an argument. If this is non-null, the new GLCanvas will share textures with that context.

Offline JBarberU

Junior Newbie





« Reply #2 - Posted 2012-05-07 22:10:11 »

How would I go about and do that? I've been trying a few different setups but I can't seem to figure this out.

My initialization looks like this:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
// Creating Tile Canvas and adding it to
// split pane  (subclass of GLCanvas)
GLProfile glP = GLProfile.getDefault();
GLCapabilities glC = new GLCapabilities(glP);
     
tileCanvas = new TileCanvas(glC);
splitPane_1.setLeftComponent(tileCanvas);

// Creating tile selector (subclass of GLCanvas)
this.tileSelector = new TileSelector(glC, tileCanvas.getContext());
splitPane_1.setRightComponent(this.tileSelector);


The only thing that gets it rendering both scenes is if I create another Texture for the TileCanvas and bind it during its rendering.
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline lhkbob

JGO Knight


Medals: 32



« Reply #3 - Posted 2012-05-08 04:51:52 »

If TileCanvas and TileSelector are types you defined, I'm assuming that they extend GLCanvas or GLJPanel.  You need to make sure that the TileSelector constructor that takes a GLContext is properly passing it to its super constructor.

If you're using GLJPanel, strange things might be going on and I'm not sure if context sharing is actually supported.  This is because the GLJPanel uses a PBuffer underneath the hood and the PBuffer is recreated every time the GLJPanel changes size.  Since GLCanvas is a heavy weight component it does not have this problem since its context stays the same.

In your case, if you're using the GLJPanel as the super type for TileCanvas and TileSelector, when the split pane is first show, everything resizes and the pbuffers are probably recreated, so the GLContext initially used is different.

To fix that, you can explicitly create a 1x1 GLPBuffer and use it as the shared context to both your canvas and selector panels.  That way, even if they internally recreate their own contexts, both will be sharing with the global 1x1 pbuffer you set up first.  Using a pbuffer in this case is also nice because it always has a context, unlike with a GLCanvas which doesn't always get one until it's visible.

As a final note, I don't think it's the best practice to subclass GLCanvas.  Instead you should use GLEventListeners to draw when necessary.

Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

xsi3rr4x (55 views)
2014-04-15 18:08:23

BurntPizza (53 views)
2014-04-15 03:46:01

UprightPath (66 views)
2014-04-14 17:39:50

UprightPath (49 views)
2014-04-14 17:35:47

Porlus (66 views)
2014-04-14 15:48:38

tom_mai78101 (90 views)
2014-04-10 04:04:31

BurntPizza (151 views)
2014-04-08 23:06:04

tom_mai78101 (247 views)
2014-04-05 13:34:39

trollwarrior1 (204 views)
2014-04-04 12:06:45

CJLetsGame (211 views)
2014-04-01 02:16:10
List of Learning Resources
by SHC
2014-04-18 03:17:39

List of Learning Resources
by Longarmx
2014-04-08 03:14:44

Good Examples
by matheus23
2014-04-05 13:51:37

Good Examples
by Grunnt
2014-04-03 15:48:46

Good Examples
by Grunnt
2014-04-03 15:48:37

Good Examples
by matheus23
2014-04-01 18:40:51

Good Examples
by matheus23
2014-04-01 18:40:34

Anonymous/Local/Inner class gotchas
by Roquen
2014-03-11 15:22:30
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!